16

使用 EF 5,代码优先。

我想对我的实体进行建模,以便导航属性仅存在于关系的一侧。

因此,如果我有一个表 Widget 和一个表 WidgetType:

public class Widget
{
    public int Id { get; set; }
    public int WidgetTypeId { get; set; }
    public WidgetType WidgetType { get; set; }
}

public class WidgetType
{
    public int Id { get; set; }
    //note there is no collection of Widgets here
}

public class WidgetMap : EntityTypeConfiguration<Widget>
{
    public WidgetMap()
    {
        HasKey(t => t.Id);
        //totable, etc.

        HasRequired(t => t.WidgetType); //what else is needed?
    }
}

我永远不想从 widgetType 的角度获取小部件,因此(无论如何对我来说)在 WidgetType 实体上没有导航属性是有意义的。

如何在不向 WidgetType 添加属性的情况下完成代码示例中记录的映射代码?这可能吗?

4

2 回答 2

16

我知道有一个公认的答案,但上述解决方案对我不起作用,我不得不对其进行一些调整。

我正在使用 Entity Framework 6 并且遇到了类似的问题。我有一个名为BaseEntity的表,它有一个指向我的UserAccount表的CreatedByID字段。

这在我的 UserAccount 类中创建了一个 BaseEntity 类型的 ICollection。我能够通过在我的BaseEntity映射中使用以下代码来解决此问题:

this.HasOptional(t => t.UserAccount)
    .WithMany()
    .HasForeignKey(t => t.CreatedByID);

然后,我能够从 UserAccount 类中删除 BaseEntity 的集合,该类在 EF6 中创建了一个单向的一对多映射。

UserAccount 条目是可选的,因为 UserAccount 继承自 BaseEntity。如果这是模型中的必需属性,请确保使用 HasRequired()。

于 2014-12-21T20:19:45.660 回答
12

As requested in comments, here's my answer.

You should try:

HasRequired(t => t.WidgetType).WithRequired().HasForeignKey(t => t.FKField);
于 2013-05-29T17:45:06.673 回答