请详细说明Code First Fluent映射

时间:2012-04-22 10:53:55

标签: .net entity-framework entity-framework-4 ef-code-first

流畅的API的一个卖点(我知道一个小卖点)是流畅的调用链可以类似于自然语言,乍一看这看起来都很棒,但Code First流畅的映射就是这种情况API,这些调用与英语的距离太远了,我见过的所有文档总是在一个描述中描述整个调用链。

我正在寻找封面材料,例如像这样流畅的呼叫链:

modelBuilder.Entity<Status>().HasRequired(s => s.Login).WithMany();

“状态需要登录,此登录可以有许多状态。”

如果我对阅读该链条的方式甚至是正确的,但我确信读者知道我的意思。

1 个答案:

答案 0 :(得分:2)

让我们更加复杂地描述映射意味着什么。假设您有这两个实体:

public class Status
{
    public int Id { get; set; }
    ...
    public virtual LoginInfo Login { get; set; }
}

public class LoginInfo
{
    public int Id { get; set; }
    ...
    // No navigation property to Status
}

现在编写映射语句:

modelBuilder.Entity<Status>().HasRequired(s => s.Login).WithMany();

这句话的翻译应该是这样的(我相信母语人士可以形成更好的解释):

实体Status已映射所需的导航属性Login,用于访问相关LoginInfo实体实例,其中该实例可与许多状态相关但不暴露映射导航访问它们的属性。

原始流畅的描述会隐藏有关LoginInfo的信息,因为HasRequired的这个通用参数会自动推断出来。