2012-03-19 73 views
0

我一直在努力一段時間來將在模型中創建的相當大的EntityFramework數據庫轉換爲codefirst。我有一個問題,我似乎無法解決。我在調用堆棧上獲取了一個沒有設置爲對象實例的Object引用,其中包含以下過程。EntityFramework對象未在模型創建中設置爲對象的實例

ModelConfiguration.Configuration.Types.EntityTypeConfiguration.Configure 
ModelConfiguration.Configuration.ModelConfiguration.ConfigureEntities 

簡化後我創建了一個測試項目,將問題歸結爲最簡單的形式。

我有3個班

  • 一個它有一個具有可選B和任選的C具有的集合
  • B和C的
  • ℃的colleciton它有一個可選b和的集合是

    public class a 
    { 
        public int Id { get; set; } 
        [Required] 
        public string name { get; set; } 
    
        public virtual b b { get; set; } 
        [ForeignKey("b")] 
        public int? b_Id { get; set; } 
    
        public virtual c c { get; set; } 
        [ForeignKey("c")] 
        public int? c_Id { get; set; } 
    } 
    
    public class b 
    { 
        public int Id { get; set; } 
        public string name { get; set; } 
    
        public virtual ICollection<a> a_s { get; set; } 
        public virtual ICollection<c> c_s { get; set; } 
    } 
    
    public class c 
    { 
        public int Id { get; set; } 
    
        public virtual b b { get; set; } 
        [ForeignKey("b")] 
        public int? b_Id { get; set; } 
    
        public virtual ICollection<a> a_s { get; set; } 
    } 
    
    public class MyContext : DbContext 
    { 
        public DbSet<a> a { get; set; } 
        public DbSet<b> b { get; set; } 
        public DbSet<c> c { get; set; } 
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder) 
        { 
         modelBuilder.Entity<a>() 
          .HasOptional(m => m.b) 
          .WithMany(m => m.a_s); 
    
         modelBuilder.Entity<b>() 
          .HasMany(m => m.c_s) 
          .WithRequired(m => m.b); 
    
         modelBuilder.Entity<c>() 
          .HasMany(m => m.a_s) 
          .WithOptional(m => m.c); 
    
         base.OnModelCreating(modelBuilder); 
        } 
    
    } 
    

    當我選自O在db.a選擇o執行代碼VAR一個=,我得到上述錯誤。關於發生什麼事絕對沒有信息,所以我真的不知道該在哪裏轉。任何人都可以幫助我解決這個問題,因爲我真的想從Model First中移走。

    namespace MvcApplication2.Controllers 
    { 
        public class HomeController : Controller 
        { 
         public ActionResult Index() 
         { 
          var db = new MyContext(); 
    
          var a = from o in db.a select o; 
    
          return View(); 
         } 
    
        } 
    } 
    

回答

3

流利的配置和數據註解的查詢股價造成這個問題。 EF團隊應該處理此異常並給出有意義的錯誤消息。

刪除數據註釋和使用流利配置如下

public class a 
{ 
    public int Id { get; set; } 

    [Required] 
    public string name { get; set; } 

    public virtual b b { get; set; } 

    public int? b_Id { get; set; } 

    public virtual c c { get; set; } 

    public int? c_Id { get; set; } 
} 

public class b 
{ 
    public int Id { get; set; } 
    public string name { get; set; } 

    public virtual ICollection<a> a_s { get; set; } 
    public virtual ICollection<c> c_s { get; set; } 
} 

public class c 
{ 
    public int Id { get; set; } 

    public virtual b b { get; set; } 

    public int? b_Id { get; set; } 

    public virtual ICollection<a> a_s { get; set; } 
} 

public class NreContext : DbContext 
{ 
    public DbSet<a> a { get; set; } 
    public DbSet<b> b { get; set; } 
    public DbSet<c> c { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<a>() 
      .HasOptional(m => m.b) 
      .WithMany(m => m.a_s) 
      .HasForeignKey(m => m.b_Id); 

     modelBuilder.Entity<a>() 
      .HasOptional(m => m.c) 
      .WithMany(m => m.a_s) 
      .HasForeignKey(m => m.c_Id); 

     modelBuilder.Entity<c>() 
      .HasOptional(m => m.b) 
      .WithMany(m => m.c_s) 
      .HasForeignKey(m => m.b_Id); 

     base.OnModelCreating(modelBuilder); 
    } 
} 
+0

解決了這個問題。謝謝。看來你應該能夠混合和匹配註釋和流利的語法,但我想我會切換到流暢的everthing – Kevin 2012-03-20 10:59:34

1

嘗試把 'A' 到本地內存:

var a = from o in db.a.ToList() select o; 
+0

這給了相同的問題。問題在於創建模型。 – Kevin 2012-03-20 00:45:54

相關問題