如何用单向导航建模实体框架实体/映射

本文关键字:实体 框架 映射 建模 何用单 导航 | 更新日期: 2023-09-27 18:15:49

使用EF 5, Code First.

我想为我的实体建模,使导航属性只存在于关系的一侧。

如果我有一个表格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添加属性?这可能吗?

如何用单向导航建模实体框架实体/映射

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

我使用实体框架6,并有类似的问题。我有一个名为BaseEntity的表,它有一个CreatedByID字段,指向我的UserAccount表。

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

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

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

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

根据评论的要求,以下是我的回答。

你应该试试:

HasRequired(t => t.WidgetType).WithRequired().HasForeignKey(t => t.FKField);