entity framework模型第一个导航属性添加无效的列名称进行查询?
在我们的数据库中,我们有以下表格
Tags Id (int) Name (string) IsActive (bool) TagType (string)
和
DocumentStyles Id (int) Name (string) StyleRules (string) IsAvailable (bool) ThumbnailFileId (int nullable) ConceptTagId (int nullable)
使用EF 4.2设计器,我创建了适当的实体,并尝试将ConceptTagId的外键链接到Tag模型。
当我添加关联(从Tag到DocumentStyle的0..1到多个)时,它正确链接外键并将ConceptTag的导航属性添加到DocumentStyle对象。 我不想在Tag对象上有导航属性。
但是,在存储库中调用以下代码时
db.DocumentStyles.Include(d => d.ConceptTag).ToList();
生成的查询尝试访问Tag表上的属性DocumentStyle_ID,该属性不存在,也不应该存在。 外键是DocumentStyle表上的ConceptTagId。
这个id列来自哪里,我怎么能摆脱它?
从相关协会的属性窗口:
End1 Multiplicity:* DocumentStyle
End1 Nav属性:ConceptTag
End2 Multiplicity:标签之一为零
End2 Nav属性:{NULL}(在属性中为空)
在进一步调查中,它打破了命名风格的惯例。 要解决此问题,我必须在OnModelCreating事件中实现以下规则
builder.Entity().HasOptional(ds => ds.ConceptTag).WithMany();
这允许框架知道Tag在关系中没有期望的互惠属性,并且它不会在将来的查询中尝试查找DocumentStyle_Id属性