2012-01-27 17 views
5

Đây là im mã sử dụng để cấu hình cơ sở dữ liệu:Tại sao tôi phải Disable Lazy tải, Entity Framework 4.1 sử dụng Mã Migrations Cấu hình

internal sealed class Configuration : DbMigrationsConfiguration<DataStore> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = true; 
     SetSqlGenerator("System.Data.SqlServerCe.4.0", new SqlCeModelColumnBugWorkaroundProvider()); 

    } 

    protected override void OnSeed(DbContext context) 
    { 
     context.Configuration.LazyLoadingEnabled = false; 
     new SeedData(context as DataStore); 
    } 

    public static void DoDatabaseInitialisation() 
    { 
     var setting = ConfigurationManager.AppSettings["RequiresDbUpdate"]; 
     var requiresDbUpdate = bool.Parse(string.IsNullOrEmpty(setting) ? "false" : setting); 

     if (! requiresDbUpdate) return; 

     //otherwise create/update the database 
     var dbMigrator = new DbMigrator(new Configuration()); 
     dbMigrator.Update(); 

     ResetDbUpdateRequired("/"); 
    } 

    private static void ResetDbUpdateRequired(string appPath) 
    { 
     var hostName = WebHelper.GetHost(false); 

     if (!hostName.Contains("localhost")) 
      WebHelper.UpdateWebConfigAppSetting("RequiresDbUpdate", "false", appPath); 
    } 

Nếu ai biết làm thế nào để làm điều này, xin vui lòng cho tôi biết. Tôi cũng đã thử các thuộc tính phi ảo trên các lớp mô hình nhưng điều này dường như không tạo ra sự khác biệt nào cả.

Trả lời

3

Tôi luôn sử dụng

context.Configuration.LazyLoadingEnabled = false; 

gọi đó là trước khi sử dụng các phương pháp DbContext, một khung cảnh tương đương là thế này:

(context as IObjectContextAdapter).ObjectContext.ContextOptions.LazyLoadingEnabled = false; 
+0

Vâng tôi đã thử phương pháp này rồi, nó hoạt động chính xác mà không cần mã di chuyển đầu tiên. Vì vậy, tôi nghĩ rằng đó là một cái gì đó để làm với điều đó tại sao nó không hoạt động ... – woz

1

giải pháp Max không phải là xa điểm. Trên thực tế thúc đẩy tôi nhìn vào một vị trí khác hoặc giải pháp. Có vẻ như bạn đang sử dụng EF Code Đầu tiên, phải không? Vì vậy, trong Khởi tạo ngữ cảnh của bạn, có ghi đè 'OnModelCreated'.

Trong phương pháp này, tôi chỉ cần gọi và thiết lập thuộc tính và tất cả đã được giải quyết.

protected override void OnModelCreating(DbModelBuilder modelBuilder) { 
    base.Configuration.LazyLoadingEnabled = false; 
} 

Mô hình của tôi bây giờ ngon miệng hơn nhiều. Lười biếng tải là tuyệt vời ... nhưng không phải khi bạn không muốn nó. Và khi bạn bắt đầu có tham khảo vòng tròn, nó chỉ là vô lý.

Các vấn đề liên quan