2012-03-19 5 views
0

モデルで最初に作成されたかなり大きなEntityFrameworkデータベースをコードファーストに変換するのにしばらく苦労しています。私は解決できないような問題があります。呼び出しスタック上で次のプロシージャを持つオブジェクトのインスタンスにオブジェクト参照が設定されていません。モデル作成のオブジェクトのインスタンスにEntityFrameworkオブジェクトが設定されていない

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

投稿を簡略化する私はテストプロジェクトを作成しました。このプロジェクトでは、問題を最も単純な形に変えています。

私は3つのクラス

  • ののコレクション、そして持っているCの
  • Cのcollecitonを持ち、オプションB、オプションのC

  • Bを持っていた持っています私はdb.a選択Oでoからコードするvar A =を実行したときに、オプション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); 
        } 
    
    } 
    

    だ、私は上記のエラーを取得します。 hapenningについての情報は全くないので、どこに向けるのかは分かりません。私が本当にモデルファーストから離れたいと思っているので、誰もが私にこの問題を解決するのを手伝ってもらえますか?

    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

は問題を解決します。ありがとう。注釈と流暢な構文を混ぜ合わせて一致させることができるはずですが、私は永遠に流暢に切り替えるでしょう – Kevin

1

'' ローカルメモリに入れてみてください:流暢な構成とデータのアノテーションの重複が整理は、この問題の原因となった

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

を次のように流暢な設定を使用しています。問題はモデルを作成することです。 – Kevin

関連する問題