【问题标题】:How to create relationship between two tables with revisions using Entity Framework如何使用实体框架在两个带有修订的表之间创建关系
【发布时间】:2010-04-30 20:41:14
【问题描述】:

因此,我正在重新设计一个小型数据库(可能还有一个更大的数据库),但希望展示使用业务对象的修订/历史记录的价值。我正在将数据从 Access 切换到 MSSQL 2008。

关于在设计本身中使用哪个版本的“修订历史”,我有很多内部辩论 - 并且认为我已决定向所有表格添加“RevisionId”。

使用这种设计 - 向我们希望跟踪的所有表添加 RevisionId - 在两个表之间创建导航属性和关系的最佳方法是什么,例如

| Vendor | VendorContact |  

供应商可以有多个联系人。联系人本身将在修订中。它需要自定义扩展还是我想多了?

提前致谢。

【问题讨论】:

    标签: sql sql-server entity-framework sql-server-2008 entity-framework-4


    【解决方案1】:

    因此,您的联系人表的键现在可能是(生成的唯一 ID + 修订 ID)。

    供应商和联系人之间将存在仅使用唯一 ID 的 FK 关系。所以这将是一个 1:many 映射。

    获取当前联系人的简单请求将变为vendor.Contacts.OrderByDescending(c => c.RevisionId).First(),或者您可以根据需要获取该联系人的整个修订历史记录。

    或者您是否尝试跟踪该联系人随时间的变化(即,是 A 人而不是 B 人)?即关系本身是否需要有一个 RevisionId?

    或者您是否正在尝试跟踪对关系的修订和对它所指向的联系人的修订?

    vendor.VendorContacts.OrderBy...().First().Contact.OrderBy...().First()
    

    这可能会很快变得丑陋!

    【讨论】:

    • 哈,是的,它很快就会变得非常难看!但你第一个是对的。但是,是的,这是一个很好的方法。谢谢。有没有办法在 EF 设计器中添加这样的自定义导航属性?当我同时拥有 RevisionId 和 ContactId 的密钥时 - 关系希望将供应商的 RevisionId 映射到联系人的 RevisionId。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多