【问题标题】:Why do navigation properties have to be public for a proxy to be created?为什么导航属性必须公开才能创建代理?
【发布时间】:2012-06-18 12:21:54
【问题描述】:

http://msdn.microsoft.com/en-us/library/dd468057.aspx,我读到我希望为其设置更改跟踪代理的所有导航属性都必须是publicvirtual。据我了解,CLR 动态创建我的 POCO 的子类,并重新实现属性以提供请求的行为。

为此,我知道该属性需要为virtual,并且它应该具有protected 或更高的可访问性。但是,如果我想在程序集中使用这些方便,但又不想公开它们,我不希望它们是 public。这引出了两个问题。

  1. (据我所知)为什么运行时要求属性为public 而不是protectedinternal

  2. (针对我的实际情况)是否有任何解决方法可以隐藏导航属性,但仍有更改跟踪行为?

【问题讨论】:

    标签: entity-framework poco proxy-classes


    【解决方案1】:

    属性必须是公共的(和虚拟的)或受保护的(和虚拟的)代理才能工作。

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

    由于明显的原因(代理从您的类继承),Private 将无法工作。

    【讨论】:

    • 我可以发誓我尝试过受保护,但它没有用。我再试一次后会回到这里
    • 我已经用 POCO 生成器试过了。它对集合的设置者特别有用。
    • 它不起作用的具体原因是您无法覆盖程序集之外的内部虚拟属性,如 Danny 所述。您可以通过将您的财产标记为内部保护来达到预期的效果。
    • 请补充,您需要先配置受保护的导航。所以就像 HasMany(t => t.ProtectedVirtualNavigationCollection).WithRequred(t => t.Source)
    猜你喜欢
    • 2012-03-16
    • 1970-01-01
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多