假设我有2个表:
Person(pid, ....) //Pid is identify colum as primary key
Student(pid, Student_No,...) //pid is foreign key from Person, pid is a primary key too.
然后使用EF生成实体模型。然后尝试使用以下代码插入新数据:
Person person = new Person()
{ FirstName = "FirstName", LastName= "LastName", ... };
Student student = new Student(){Student_No="001", ...};
Student.Person = person;
mycontext.Students.AddObject(student);
mycontext.SaveChanges();
然后我得到错误: ReferentialConstraint中的依赖属性映射到存储生成的列。专栏:'pid'。
如何解决?
修改代码如:
Person person = new Person(){ FirstName = "FirstName", LastName= "LastName", ... };
mycontext.People.AddObject(person);
mycontext.SaveChanges();
Student student = new Student(){Student_No="001", Person = person, ...};
// or Student student = new Student(){Student_No="001", pid= person.pid, ...};
mycontext.Students.AddObject(student);
mycontext.SaveChanges();
然后我能够为人插入,但对于学生,仍然得到相同的错误。在EDM中检查Student实体pid属性:storegeneratedPatteren = None。相当困惑。
答案 0 :(得分:0)
听起来你有一个学生,这是一种人。如果是这样,那么您应该考虑使用Table-per-type Inheritance。详情请http://msdn.microsoft.com/en-us/library/bb738685.aspx
<强>编辑:强>
如果您选择不使用继承,则需要先插入此人:
Person person = new Person()
{ FirstName = "FirstName", LastName= "LastName", ... };
mycontext.Person.AddObject(person);
mycontext.SaveChanges();
答案 1 :(得分:0)
在EDM中检查学生实体pid属性:storegeneratedPatteren = None。相当困惑。
仍然与要添加的表的身份规范(身份,身份增量,身份种子)或关系映射到的表列有关。错误'ReferentialConstraint中的依赖属性映射到存储生成的列'显示是否:
将新对象传递给addObject(),其中包含一个字段,该字段的值已设置为应由数据库生成。解决方案:不要为数据库中具有自动增量ID的字段传递值。
您不小心将表的主键映射到数据库中的错误外部列。解决方案:查看外键关系。
第二种情况不太明显,但如果您在图表中快速拖放约束,则会经常发生。