【问题标题】:Fluent API - one to manyFluent API - 一对多
【发布时间】:2013-01-13 01:33:55
【问题描述】:

我似乎在 fluent API 中找不到一对多关系语法。

作为一个例子,我有两个如下表

用户

Id
Name

用户历史

Id
UserId
Date

在课程中我有以下内容

public class User 
{
     public int Id { get; set; }
     public virtual ICollection<UserHistory> Histories { get; set; }
}

public class UserHistory
{
     public int Id { get; set; }
     public int UserId { get; set; }
     public DateTime Date { get; set; }
}

我已经尝试了以下方法,但我不确定它是否真的正确。

modelBuilder.Entity<User>()
       .HasRequired(w => w.Histories)
       .WithMany();

modelBuilder.Entity<User>()
       .HasMany(f => f.Histories)
       .WithOptional()
       .HasForeignKey(f => f.UserId);

一对多关系的正确语法是什么?

从技术上讲,我可以通过添加一个新表将其分解为多对多,但我不想引入另一个表。

【问题讨论】:

    标签: entity-framework-5


    【解决方案1】:

    在您的模型中,User 实体有很多 Histories 每个历史都有一个必需 User 和关系有一个 外键,叫做UserId

    modelBuilder.Entity<User>()
       .HasMany(u => u.Histories)
       .WithRequired()
       .HasForeignKey(h => h.UserId);
    

    (关系必须是必需的(不是可选的),因为外键属性UserId 不可为空。)

    【讨论】:

    • 如果 UserHistory UserId 可以为空,那么它将是 WithOptional()?
    • 这就是您在 2019 年定义一对多关系的方式吗?在任何地方都找不到任何好的例子
    • @matt 我同意,我找不到关于如何建立这种关系的更新指南
    猜你喜欢
    • 2014-12-03
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    • 2013-04-23
    • 2017-08-12
    • 1970-01-01
    • 2019-01-04
    • 2014-08-04
    相关资源
    最近更新 更多