我从其他问题一直在阅读这个主题,但似乎我找不到像我一样的人。
我有一个File类,有一个ShareFileRecipients的HashSet
public HashSet<SharedFileRecipient> Recipients { get; set; }
EF(版本5)完美地映射了这个问题,这不是问题,在数据库中,dbo.SharedFileRecipient表具有为此关系“File_Id”生成的外键列,该关系列未在SharedFileRecipient类中公开。
直到昨天才出现这个问题,我不得不写一个查询,因为我不得不加入这两个(因为我希望复制一个特定的视图)但我不能使用LINQ,因为File_Id没有在SharedFileRecipient中公开。 / p>
我尝试使用ForeignKey注释,ColumnName注释
[Column("File_Id")]
public Guid? File_Id { get; set; }
[Column("Folder_Id")]
public Guid? Folder_Id { get; set; }
但应用程序将抛出EF异常,说该模型已更改。当我运行Add-Migration以查看“需要”进行哪些更改时,生成的脚本实际上是在尝试进入数据库并将现有的列名从File_Id更改为File_Id1。
我恢复了我的更改,我确定更改列名这样只会破坏原来的关系设置,这已经有效了。
我真的希望能够使用那个未曝光的File_Id Guid列,这样我就可以在LINQ中编写查询了,就是这样。
答案 0 :(得分:1)
此博客文章解释了为什么我要做的事情无法使用。
用于映射关联的属性 - 外键 - 不是由实体框架公开的,并且在生成的代码中根本不可用。但是,您可以向部分类添加自定义代码以公开这些值[1]:
返回Child.ParentReference.ID;但是,你不能使用它们 LINQ查询的属性,因为这些额外的属性不能 由EF映射到数据库。没有限制或订单 那些属性,它们就像无用一样好,所以我们必须工作 在EF本身内。