我们正在使用EF Code First 4.3.1。 我们正在开发一个引用多个类库的ASP.NET Web角色。 有两个类库,每个类包含类和一个单独的DBcontext。
让我们说Library1有A类和B类。 DBcon1:DbSet和DbSet
让我们说Library2有C和D类。 C级{ [键] public int CId {get;设置;}
[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();
}
我得到一个例外: “具有标识的成员在元数据集合中不存在。 参数名称:identity“
DBCon1和DBcon2都使用了理智的SQL Server数据库“SampleDB”。
请指出正确的方向。
答案 0 :(得分: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
}
可能不是你的问题,但也许会指出你正确的方向,希望能帮助别人。
答案 1 :(得分:0)
异常有点神秘,但如果您意识到上下文需要有关实体(元数据)的信息才能编写sql语句,那就非常清楚了。因此,您的DBcon2上下文不知道在何处查找A
的主键,因为它没有关于A的元数据。
但是,您可以设置整数属性A_Id(或类似),但是您必须编写自定义代码才能将其解析为A
。
另一个选择是合并(部分)上下文,如果可能的话。