实体框架中未在模型中公开的子对象中的外键

时间:2014-09-25 15:16:26

标签: linq entity-framework foreign-keys entity-framework-5

我从其他问题一直在阅读这个主题,但似乎我找不到像我一样的人。

我有一个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中编写查询了,就是这样。

1 个答案:

答案 0 :(得分:1)

此博客文章解释了为什么我要做的事情无法使用。

  

用于映射关联的属性 - 外键 - 不是由实体框架公开的,并且在生成的代码中根本不可用。但是,您可以向部分类添加自定义代码以公开这些值[1]:

     

返回Child.ParentReference.ID;但是,你不能使用它们   LINQ查询的属性,因为这些额外的属性不能   由EF映射到数据库。没有限制或订单   那些属性,它们就像无用一样好,所以我们必须工作   在EF本身内。

http://encodo.com/en/blogs.php?entry_id=163