实体框架模型第一个导航属性添加无效的列名进行查询?

2024-01-02

在我们的数据库中,我们有以下表格

Tags
  Id (int)
  Name (string)
  IsActive (bool)
  TagType (string)

and

DocumentStyles
  Id (int)
  Name (string)
  StyleRules (string)
  IsAvailable (bool)
  ThumbnailFileId (int nullable)
  ConceptTagId (int nullable)

通过 EF 4.2 设计器,我创建了适当的实体,并尝试将 ConceptTagId 的外键链接到标签模型。

当我添加关联(从 Tag 到 DocumentStyle 的 0..1 到多个)时,它正确链接外键并将 ConceptTag 的导航属性添加到 DocumentStyle 对象。我不希望 Tag 对象上有导航属性。

但是,当在存储库中调用以下代码时

db.DocumentStyles.Include(d => d.ConceptTag).ToList();

结果查询尝试访问 Tag 表上的 DocumentStyle_ID 属性,该属性不存在也不应该存在。外键是 DocumentStyle 表上的 ConceptTagId。

这个 id 列从哪里来,我怎样才能摆脱它?

从相关关联的属性窗口:

End1 多重性:DocumentStyle 的 *
End1 导航属性:ConceptTag
End2 多重性:标签之一的零
End2 Nav 属性:{NULL}(属性中为空白)


经进一步调查,它打破了命名风格的惯例。为了解决这个问题,我必须在 OnModelCreating 事件中实现以下规则

builder.Entity<DocumentStyle>().HasOptional(ds => ds.ConceptTag).WithMany(); 

这允许框架知道 Tag 在关系中没有期望的互惠属性,并且它不会尝试在将来的查询中查找 DocumentStyle_Id 属性

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实体框架模型第一个导航属性添加无效的列名进行查询? 的相关文章

随机推荐