【发布时间】:2016-07-03 20:32:21
【问题描述】:
我们销售一种产品,我们为其颁发许可证编号,并且客户可以每年升级。我想设置一个License POCO,通过定义UpgradedTo 和UpgradedFrom 导航属性来跟踪此升级信息,这将使我们能够轻松地向上/向下移动相关许可证的“链”。所以基本上是这样的:
public class License
{
[Key]
public string LicenseNum { get; set; }
// Other properties relating to license omitted...
// Optional relationship.
public License UpgradedTo { get; set; }
// Optional relationship.
public License UpgradedFrom { get; set; }
}
我真的很纠结如何使用 EF Annotations 和 Fluent API 来定义它。我认为自我参照方面是让我绊倒的地方。
我们还希望能够在给定 License 上设置这些 UpgradeTo/UpgradeFrom 属性之一,并让 EF 处理关系另一端的“相反”升级属性.所以类似于以下内容:
// Licenses upgraded 1 > 2 > 3
License lic1 = CreateLicense('1');
License lic2 = CreateLicense('2');
License lic3 = CreateLicense('3');
using (var db = new Model1())
{
// Insert into database
db.Licenses.Add(lic1);
db.Licenses.Add(lic2);
db.Licenses.Add(lic3);
db.SaveChanges();
// Specify UpgradeFrom/UpgradeTo info only on lic2.
lic2.UpgradedFrom = lic1;
lic2.UpgradedTo = lic3;
db.SaveChanges();
// lic1 and lic3 automatically update possible?
Debug.Assert(lic1.UpgradedTo == lic2);
Debug.Assert(lic3.UpgradedFrom == lic2);
}
【问题讨论】:
标签: c# entity-framework code-first self-reference