具有标识的成员在元数据集合中不存在。参数名称:identity

时间:2012-03-31 10:12:54

标签: asp.net sql-server entity-framework code-first

我们正在使用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”。

请指出正确的方向。

2 个答案:

答案 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

另一个选择是合并(部分)上下文,如果可能的话。