DbContext Code First:创建多个相关实体

时间:2013-11-05 19:23:36

标签: entity-framework dbcontext

我(我认为是)一个相当标准的问题。

simple inheritance

在我的经理实体中,我从经理

引用了我的人物
[ForeignKey("PersonID")]
public Person Person { get; set; }

我想一次创建一个新经理

var mgr = new Manager { Person = new Person() };

这会因外键错误而失败,因为此人尚不存在。

我通过保存Person并手动向新Manager {PersonID = myNewPerson.ID}提供人员ID来完成这项工作;

更新

不确定这是否重要,但我支持的数据库是Oracle

2 个答案:

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

希望这会有所帮助。