【问题标题】:How would I defined a 1-1 relationship using EF-5 code-first我将如何使用 EF-5 代码优先定义 1-1 关系
【发布时间】:2012-12-21 22:46:08
【问题描述】:

如何为具有以下关系的实体框架 5 定义一组 POCO 类:

Primary 与Secondary.Data 是一对一关系,Primary 与Tertiary.Data 也是一对一关系

        ---------(1)- Secondary.Data
Primary +
        ---------(1)- Tertiary.Data

所以 Primary 有一个自动编号(SQL Server 中的 IDENTITY)主键(Primary.PrimaryID) 并且每个子类的主键也是 Primary 的外键(例如,Secondary.Data.PrimaryID 既是主键,也是 Primary.PrimaryID 的外键)

编辑

SecondaryTertiary 表示 SQL Server 中的架构,并在代码中由命名空间表示。

【问题讨论】:

  • Secondary 和 Tertiary 可以继承 Primary 吗? (作为类)。
  • 他们不能。它们包含完全独立(不常见)的数据。

标签: c# vb.net theory entity-framework-5


【解决方案1】:

在Primary类中如下:

    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int PrimaryID { get; set; }

    public virtual Secondary SecondaryEntity { get; set; }
    public virtual Tertiary TertiaryEntity { get; set; }

在其他两个类中,您将为 ID 执行此操作:

    [Key, ForeignKey("PrimaryEntity")]
    public int PrimaryID { get; set; }

    public virtual Primary PrimaryEntity { get; set; }

ForeignKey 属性需要指向您在对象上拥有的虚拟属性的名称,在本例中为 PrimaryEntity。

我希望这会有所帮助。

编辑:根据 Ladislav 对 this question 的回答以及我们在 Chat 中讨论的内容,您需要确保您的 Secondary 和 Tertiary 类虽然位于不同的命名空间和架构中,但具有不同的类名。

【讨论】:

  • 我知道virtual 关键字是什么意思.. 但它在这里的目的是什么?
  • 主要是延迟加载实体。显然,您实际上并不需要它(根据此处:codeproject.com/Articles/368164/…),但我个人喜欢在执行 EF 查询时延迟加载。
  • 如果你愿意和我一起聊天,我有几个后续问题:chat.stackoverflow.com/rooms/21782/…
  • 我可以在 23 小时内分配赏金。是 SO 限制。
猜你喜欢
  • 1970-01-01
  • 2013-09-14
  • 1970-01-01
  • 1970-01-01
  • 2018-05-31
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
相关资源
最近更新 更多