2016-07-14 24 views
0

根据Why do navigation properties have to be public for a proxy to be created?的导航属性可以保护内部虚拟,并不需要公共虚拟和实体框架仍然会提供代理。 我已编程的导航属性这样的:导航属性可以保护内部虚拟吗?

protected internal virtual ICollection<MyEntityType> MyNavigationCollection { get; set; } 

在映射我明明有:

.WithMany(t => t.MyNavigationCollection) 

这似乎与我所引用的文章线。我遇到的问题是,当我查询拥有对象时,Entity Framework不再为MyNavigationCollection分配一个代理集合的实例,因为我已将MyNavigationCollection的可见性更改为受保护的内部虚拟。

我为了让Entity Framework使用具有受访问保护内部虚拟机制的集合的代理对象而错过了什么?

回答

0

道具不能是内部的。如果实体框架代码是内部标记的,则它不可访问。删除内部,它应该工作。

代理未在您的程序集中预先定义,因此内部不起作用。

内部项目仅对包含它们的程序集可见,EF代码在程序集外部,因此代理将无法访问它,代理对受保护项目具有完全可见性,因为它继承了您的类使受保护的成员在代理中可见。

+0

确定吗?受保护的内部手段既受保护也受内部保护,那么为什么要通过内部扩大可视性使其对Entity Framework不那么可见? –

+0

内部项目仅对包含它们的程序集可见,EF代码在程序集外部,因此代理将无法访问它,代理对受保护项目具有完全可见性,因为它继承了您的类,从而使受保护的项成员在代理中可见。 –

+0

您引用的SO中的注释也解释了这一点。内部根本无法工作。保护很好。 –

相关问题