Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework EF4中受保护的实体属性对于数据服务来说是个坏主意吗?_Entity Framework_Wcf Data Services - Fatal编程技术网

Entity framework EF4中受保护的实体属性对于数据服务来说是个坏主意吗?

Entity framework EF4中受保护的实体属性对于数据服务来说是个坏主意吗?,entity-framework,wcf-data-services,Entity Framework,Wcf Data Services,在深入了解System.Data.Services之后,我发现Data Services不喜欢EF模型中标记为受保护的属性 当数据服务初始化并尝试为EF模型生成元数据时,会发生异常。显然,Microsoft决定在此处反映受保护的属性时抛出NullReferenceException,而不是有意义的消息 我使用一些受保护的属性来包装数据库中不可用的自定义类型。这是一种在数据库中表示示例枚举的方便方法。枚举可以表示为一个受保护的字符串属性,该属性带有一个公共枚举包装器,该包装器可以转换为字符串值,也

在深入了解System.Data.Services之后,我发现Data Services不喜欢EF模型中标记为受保护的属性

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

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

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

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

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


很明显,我可以公开一切,但这是一种与globals押韵的做法。

打电话怎么样?

对不起,我不知道我应该如何使用SetEntitySetAccessRule。据我所知,访问规则用于保护数据集,例如,它可以以只读的形式呈现给用户。这在保护数据服务公开的数据库时很有意义,但实际上与我的问题无关,我的问题本质上是一个实体/CLR类型映射问题。我可能误解了你的问题,但我认为你试图阻止WCF客户端看到你的实体<代码>无将执行此操作。此问题不涉及无访问权限。我试图对我的STE实体进行建模,以使属性不受数据库支持的类型的限制。我支持使用属性包装器的特殊类型,但为了清理实体类,我希望保护底层数据库类型(比如包装为枚举的字符串),以拒绝用户直接修改它们。如果暴露了底层属性,用户可以分配虚假的值,例如不存在的枚举值,OOAD最好能防止这种情况发生。