【问题标题】:How to set a 0..* relationship in Entity Framework Code First?如何在 Entity Framework Code First 中设置 0..* 关系?
【发布时间】:2014-11-11 18:42:31
【问题描述】:

我有两个类的下一个代码:

public class Object
{
    public int ObjectID { get; set; }

    public int Object2ID { get; set; }
    public virtual Object2 Object2 { get; set; }
}

public class Object2
{
    public int Object2ID { get; set; }

    public virtual ICollection<Object> Objects { get; set; }
}

我知道使用 Entity Framework,这将创建一个一对多的关系,但我想知道的是如何将其转换为一个零对多的关系。

我是 Entity Framework 的新手,找不到任何直接的答案。

【问题讨论】:

  • 它仍然是一对多的关系,区别仅在于是否具有必需的 Principal 或可选的 Principal on Dependent。
  • 我同意,我看不出你怎么能有一个 0 到任何东西的关系,如果有 0 的东西那么它就不能与任何东西相关。
  • 仅供参考,您不使用∞ 的正常命名法,因为它是一个特殊字符,某些系统可能不喜欢Unicode。通常您会将其表示为0..*,这就是您将在大多数文档参考中看到的内容。

标签: c# entity-framework relationships object-relationships


【解决方案1】:

对于实体框架中的 0 对多关系,外键可以为空。

public int? Object2ID { get; set; }

【讨论】:

  • 是否需要设置 public virtual Object2 Object2 { get;放;也可以为空,还是只有键?
  • 没有。作为一个类,如果需要,Object2 已经可以设置为 null。
  • @user3552621 “本质上”可以为空。顺便说一句,您不需要在 Object 类中有 Object2ID。
【解决方案2】:

另一种方法是使用 Fluent API:

public class YouDbContext : DbContext
{
    protected override void OnModelCreating(DbModelBuilder mb)
    {
        mb.Entity<Object2>
            .HasMany(o1 => o1.Objects)
            .WithOptional(o2 => o2.Object2);

        base.OnModelCreating(mb);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 2016-06-01
    • 1970-01-01
    相关资源
    最近更新 更多