Nonaktifkan Configuration.ProxyCreationEnabled secara permanen di EF?

Daripada harus melakukan hal berikut pada setiap kueri, apakah ada cara untuk menetapkan nilai tersebut secara global? Ada pengaturan pemuatan lambat di tampilan model, tetapi sepertinya tidak ada pengaturan untuk ProxyCreation.

        using (var context = new LabEntities())
        {
            **context.Configuration.ProxyCreationEnabled = false;**

            var Query = from s in context.EAssets
                        .Include("Server").Include("Type").Include("Type.Definition")
                        where (s.Type.Definition.b_IsScannable == true) &&
                        (s.Server.s_Domain == Environment.UserDomainName || s.Server.s_Domain == null)
                        select s;
           var Entities = Query.ToList();
        }

Saya tidak sepenuhnya memahami manfaat dari opsi ini, tetapi saya tahu bahwa di visual studio menandai semua objek saya dengan sufiks serial yang tidak masuk akal dan membuat penggunaan debugger tidak masuk akal.


person jwrightmail    schedule 13.10.2012    source sumber


Jawaban (2)


Anda dapat menonaktifkannya di konstruktor, sehingga akan dinonaktifkan setiap kali Anda membuat konteks baru:

public class LabEntities : DbContext
{
   public LabEntities()
   {
      Configuration.ProxyCreationEnabled = false;
   }
}
person Mark Oreta    schedule 13.10.2012
comment
Bagaimana dengan masalah terkait pembuatan file otomatis yang terjadi jika Anda me-refresh model? Apakah pengeditan manual tidak akan selesai? - person jwrightmail; 15.10.2012
comment
Apa masalah dengan pembuatan file otomatis? - person Mark Oreta; 15.10.2012
comment
Untuk menonaktifkannya di konstruktor, Anda harus mengedit file yang dibuat secara otomatis. Dalam kasus saya, datamodel.context.cs-nya. ‹auto-generated› // Kode ini dihasilkan dari template. // // Perubahan manual pada file ini dapat menyebabkan perilaku tidak terduga pada aplikasi Anda. // Perubahan manual pada file ini akan ditimpa jika kode dibuat ulang. // ‹/dibuat secara otomatis› - person jwrightmail; 15.10.2012
comment
Oh, Anda menggunakan edmx - Entitas membuat sebagian OnContextCreated() - Anda dapat memasukkan Configuration.ProxyCreationEnabled ke dalamnya, di kelas teman sehingga tidak ditimpa - person Mark Oreta; 15.10.2012

Jika Anda menggunakan pendekatan model-first, artinya Anda memiliki file .edmx, cara menonaktifkan opsi ini secara permanen adalah dengan memodifikasi file .Context.tt. File ini adalah templat pembuatan kode yang digunakan proses pembangunan untuk menghasilkan kelas turunan DbContext Anda.

Buka file ini dan temukan konstruktornya:

public <#=Code.Escape(container)#>()
        : base("name=<#=container.Name#>")
    {
<#
        WriteLazyLoadingEnabled(container);
#>
        //add the following line of code

        this.Configuration.ProxyCreationEnabled = false;
    }

lalu tambahkan baris kode untuk menyetel properti ini ke false. Bangun kembali proyek Anda dan verifikasi konteks yang dihasilkan berisi baris tersebut.

person Scott Nelson    schedule 06.12.2012
comment
Ini adalah jawaban yang benar menurut saya. Namun berhati-hatilah jika memutakhirkan Entity Framework di masa mendatang karena dapat menimpa perubahan Anda pada file .tt. (Kecuali saya salah?) - person rwalter; 11.11.2013
comment
Selalu bertanya-tanya tentang itu...Saya ingin melihat jawaban yang memperluas kelas parsial yang dihasilkan menggunakan DbContext (yang tidak mendefinisikan OnContextCreated). - person seebiscuit; 06.05.2017