我(我认为是)一个相当标准的问题。
在我的经理实体中,我从经理
引用了我的人物[ForeignKey("PersonID")]
public Person Person { get; set; }
我想一次创建一个新经理
var mgr = new Manager { Person = new Person() };
这会因外键错误而失败,因为此人尚不存在。
我通过保存Person并手动向新Manager {PersonID = myNewPerson.ID}提供人员ID来完成这项工作;
更新
不确定这是否重要,但我支持的数据库是Oracle
答案 0 :(得分:0)
实体框架正在完成它应该做的事情,强制执行外键约束。考虑一下,在SQL中,如果没有提供正确的Manager
,就无法插入PersonID
表。一种替代方法是使PersonID成为可以为空的外键
public int? PersonID { get; set; }
答案 1 :(得分:0)
我认为您遇到的问题是数据库对您的人员没有任何了解。首先,您需要告诉您的数据库,嘿,应该添加此人,然后将其与管理器关联,如下所示:
var p = new Person();
db.Persons.Add(p);
var m = new Manager { Person = p };
db.Managers.Add(m);
db.SaveChanges();
如果您注意到,您告诉数据库插入记录的顺序。首先,您告诉它添加Person,一旦此人在数据库中,您就可以将其与推送到数据库的其他内容联系起来。 DbContext
能够跟踪所有这些逻辑。
这样做你不需要担心ID,你的实现看起来更像纯OOP。
希望这会有所帮助。