2012-03-31 1 views
3

EF Code First 4.3.1を使用しています。 複数のクラスライブラリを参照するASP.NET Webロールを開発しています。 それぞれにクラスと個々のDBコンテキストを含む2つのクラスライブラリがあります。IDを持つメンバーがメタデータコレクションに存在しません。パラメータ名:identity

ライブラリ1は、クラスAとB DBcon1を持っているとしましょう:DbSetとDbSet

はLibrary2は、クラスCおよびD クラスC { [キー] 公共int型のCIDを{取得持って言うことができます。セット;}

[Required] 
public virtual A referencedA {get; set;} 
} 
DBcon2: DbSet<C> and DbSet<D> 

を私のようなDBcon2を使用しようとすると:として

 using (var con = new DBcon2()) 
     { 
      C vr = new C(); 
      vr.CId= 1; 
      vr.referencedA = DBCon1.As.First(); 
      con.Cs.Add(vr); 
      con.SaveChanges(); 
     } 

私は例外を取得: は「アイデンティティを持つメンバーは、メタデータの収集に存在しない パラメータ名:ID "

DBCon1とDBcon2の両方が、SQL Serverデータベース" SampleDB "を使用しています。

正しい方向に指摘してください。

答えて

0

文脈がSQL文を書くことができるエンティティ(メタデータ)に関する情報を必要としていることを知っていれば、例外はあるが、はっきりしている。したがって、DBcon2コンテキストには、Aの主キーがどこにあるかを見つける手がかりがありません。

ただし、整数プロパティA_Idなどを設定できますが、それを解決するためのカスタムコードをAに書き込んでください。

もう1つの方法は、可能であれば、コンテキストの一部をマージすることです。

+0

コンテキストをマージする方法についてはっきりしていますか?それはどういう意味ですか? また、Aにはキーがあり、DBcon1には知られていますが、DBCon2にどのように伝えますか? –

+0

コンテキストは同じデータベース上にあるので、すべてのクラスを1つのコンテキストに入れることができます。マジカルマージコマンドではなく、データレイヤの手動リファクタリングです。 –

+0

他のモジュールとは独立してコアDBCon1を追加したいので、DataContextを別のものにしたいと思っています。 DBCon2にAのメタデータを通知する方法を教えてください。 – manishKungwani

4

私はこのエラーを持って、関連テーブルにナビゲーションプロパティを設定しようとしていないことによってそれを固定し、単に外部キーIDの代わりに

例えば

public class Student() 
{ 
    public int StudentId { get; set; } 
    public string StudentName { get; set; } 
    public int CourseId { get; set; } 
    public virtual Course Course { get; set; } 
} 

public class Course() 
{ 
    public int CourseId { get; set; } 
    public string CourseName { get; set; } 
    public virtual ICollection<Student> Students { get; set; } 
} 

主なコードセット:

var myCourse = new Course(); 
var myCourseId = 1; 

var student = new Student() { 
    CourseId = myCourseId 
    // Course = myCourse <-- this would cause the error 
} 

あなたの問題ではないかもしれませんが、正しい方向にあなたを指し示し、うまくいけば他の人を助けてくれるかもしれません。

関連する問題