2014-09-25 54 views
0

我一直在阅读足够的关于其他问题的主题,但它似乎并不像我能找到与我的设置类似的人。未在模型中暴露的子对象中的实体框架外键

我有一个文件类,与ShareFileRecipients

 public HashSet<SharedFileRecipient> Recipients { get; set; } 

EF的一个HashSet(第5版)映射此完美,这不是问题,在数据库中的表dbo.SharedFileRecipient具有外键为此关系“File_Id”生成的列未在SharedFileRecipient类中公开。

这是昨天没有问题,我不得不写一个查询,我不得不加入两个(因为我希望重复一个特定的视图),但我不能使用LINQ,因为File_Id不在SharedFileRecipient中公开。

我尝试使用ForeignKey的注解时,ColumnName注释

[Column("File_Id")] 
    public Guid? File_Id { get; set; } 

    [Column("Folder_Id")] 
    public Guid? Folder_Id { get; set; } 

但应用程序将引发异常EF,称该模型已经改变。当我运行“添加迁移”查看“需要”执行哪些更改时,生成的脚本实际上是试图进入数据库,并将已存在的列名从File_Id更改为File_Id1。

我回复了我的更改,我确定更改列名称就像什么都不会做,但会破坏原始关系设置,这已经可以工作了。

我只是真的想能够使用未公开的File_Id Guid列,因此我可以在LINQ中编写我的查询,就是这样。

回答

1

此博客文章解释了为什么我试图做的不可用。

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

return Child.ParentReference.ID;但是,您不能将这些 属性用于LINQ查询,因为这些额外属性不能由 通过EF映射到数据库。如果没有限制或排序 这些属性,它们就像无用,所以我们必须在EF本身内部工作 。

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