2

我有(我认为是)一个非常标准的问题。

简单继承

在我的 Manager 实体中,我的 Person 从 Manager 中引用

[ForeignKey("PersonID")]
public Person Person { get; set; }

我想一次性创建一个新经理

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

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

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

更新

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

4

2 回答 2

0

实体框架正在做它应该做的事情,强制执行外键约束。想想看,在 SQL 中,如果Manager不提供适当的PersonID. 一种替代方法是将 PersonID 设为可为空的外键

public int? PersonID { get; set; }
于 2013-11-05T19:34:23.153 回答
0

我认为您面临的问题是数据库对您的人没有任何了解。首先,您需要告诉您的数据库,嘿,这个人应该被添加,然后将其与 Manager 相关联,如下所示:

var p = new Person();
db.Persons.Add(p);
var m = new Manager { Person = p };
db.Managers.Add(m);
db.SaveChanges();

如果您注意到,您正在告诉您的数据库以什么顺序插入记录。首先,您告诉它添加 Person,一旦此人在数据库中,您就可以将其与推送到数据库的其他内容相关联。DbContext能够跟踪所有这些逻辑。

这样做您无需担心 ID,您的实现看起来更像纯 OOP。

希望这可以帮助。

于 2013-11-05T19:57:57.123 回答