Asp.net 元数据集合中不存在标识为的成员。参数名称:identity
我们首先使用的是EF代码4.3.1。 我们正在开发一个涉及多个类库的ASP.NET Web角色。 有两个类库,每个类库包含类和一个单独的DBcontext 假设图书馆有A和B两类。 DBcon1:DbSet和DbSet 假设图书馆2有C类和D类。 C类{ [关键] 公共int-CId{get;set;}Asp.net 元数据集合中不存在标识为的成员。参数名称:identity,asp.net,sql-server,entity-framework,code-first,Asp.net,Sql Server,Entity Framework,Code First,我们首先使用的是EF代码4.3.1。 我们正在开发一个涉及多个类库的ASP.NET Web角色。 有两个类库,每个类库包含类和一个单独的DBcontext 假设图书馆有A和B两类。 DBcon1:DbSet和DbSet 假设图书馆2有C类和D类。 C类{ [关键] 公共int-CId{get;set;} [Required] public virtual A referencedA {get; set;} } DBcon2: DbSet<C> and DbSet<D>
[Required]
public virtual A referencedA {get; set;}
}
DBcon2: DbSet<C> and DbSet<D>
我得到一个例外:
“元数据集合中不存在标识为的成员。
参数名称:标识“
DBCon1和DBcon2都使用sane SQL Server数据库“SampleDB”
请给我指出正确的方向。例外情况有点神秘,但如果您意识到上下文需要有关实体(元数据)的信息才能编写sql语句,则非常清楚。因此,您的DBcon2上下文不知道在哪里可以找到
a
的主键,因为它没有关于a的元数据
但是,您可以设置一个整数属性A_Id(或类似的属性),但随后必须编写自定义代码将其解析为A
另一个选项是合并(部分)上下文,如果可能的话。我得到了这个错误,并通过不尝试在相关表中设置导航属性来修复它,只需设置外键id即可 乙二醇
公共班级学生()
{
公共int StudentId{get;set;}
公共字符串StudentName{get;set;}
public int CourseId{get;set;}
公共虚拟课程{get;set;}
}
公营课程(
{
public int CourseId{get;set;}
公共字符串CourseName{get;set;}
公共虚拟ICollection学生{get;set;}
}
主要代码:
var myCourse = new Course();
var myCourseId = 1;
var student = new Student() {
CourseId = myCourseId
// Course = myCourse <-- this would cause the error
}
var myCourse=新课程();
var myCourseId=1;
var student=新学生(){
CourseId=myCourseId
//Course=myCourse您能清楚地知道如何合并上下文吗?这是什么意思?另外,A有一个键,DBcon1知道,我们如何告诉DBCon2相同的键?既然上下文在同一个数据库上,您可以将所有类放在一个上下文中。这不是什么神奇的合并命令,只是手动重构数据层。W我们希望保持DataContext的不同,因为我们希望保持核心DBCon1独立于添加的其他模块。您能建议如何继续并将A的元数据通知DBCon2吗?您必须将A包含在DBCon2上下文中,并保持仅用于参考的郑重意图,因此DBCon1用于维护CA的e。
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
}