【问题标题】:Are protected entity properties in EF 4 a bad idea with data services?EF 4 中受保护的实体属性对数据服务来说是个坏主意吗?
【发布时间】:2010-09-02 01:00:17
【问题描述】:

在 System.Data.Services 的一些 NullReferenceException 令人头疼之后,我发现数据服务不喜欢 EF 模型中标记为受保护的属性。

当数据服务正在初始化并尝试为 EF 模型生成元数据时会发生异常。显然,微软决定在此处反映受保护的属性而不是有意义的消息时抛出 NullReferenceException。

我使用一些受保护的属性来包装数据库中不可用的自定义类型。这是一种在数据库中表示例如枚举的便捷方式。枚举可以表示为带有公共枚举包装器的受保护字符串属性,该包装器可以与字符串值相互转换。这在所有其他 EF 使用场景中都非常有效,我宁愿不放弃受保护的属性模式。

我使用与 WCF 完美结合的自我跟踪实体。受保护的属性运行良好,因为我检查了“在引用的程序集中重用类型”,这使我的包装器属性在所有程序集中都可用。我希望我可以用数据服务做类似的事情。我意识到如果我想构造一个查询,其中受保护的属性是表达式的一部分,我可能会遇到麻烦,但这是一个不同的问题,可以通过其他方式解决。

是否有一种(实用的)方法可以将受保护的实体属性与数据服务一起使用?

如果不是,如果我不想让我的公共属性集保持整洁,我应该如何最好地表示非数据库类型?

显然我可以将所有内容都公开,但那将是一种与全局押韵的做法。

【问题讨论】:

    标签: entity-framework wcf-data-services


    【解决方案1】:

    打电话给SetEntitySetAccessRule怎么样?

    【讨论】:

    • 对不起,我不知道应该如何使用 SetEntitySetAccessRule。据我了解,访问规则用于保护数据集,例如,它可以以只读方式呈现给用户。这在保护数据服务暴露的数据库时很有意义,但它与我的问题并不真正相关,这本质上是一个实体/CLR 类型映射问题。
    • 我可能误解了你的问题,但我认为你试图阻止 WCF clients 看到你的实体。 None 会这样做。
    • 没有访问权限不是这个问题的关注点。我正在尝试对我的 STE 实体进行建模,以使属性不受数据库支持的类型的限制。我支持带有属性包装器的特殊类型,但是为了清理我的实体类,我想保护底层数据库类型(比如说一个包装为枚举的字符串)以拒绝用户直接修改它们。如果底层属性暴露,用户可以分配虚假值,例如不存在的枚举值,防止这种情况发生是 OOAD 的好方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 2012-03-17
    相关资源
    最近更新 更多