如何用单向导航建模实体框架实体/映射
本文关键字:实体 框架 映射 建模 何用单 导航 | 更新日期: 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);