gpt4 book ai didi

WCF、 Entity Framework 和数据契约

转载 作者:行者123 更新时间:2023-12-04 09:56:54 25 4
gpt4 key购买 nike

使用 VS 2008 和 .NET 3.5 SP1:

我正在使用 WCF 来允许客户端连接到使用 Entity Framework 读取和写入数据库条目的服务。默认情况下,从数据库自动生成的实体应用了 DataContract 属性。

不幸的是,许多公开的字段并不供客户端使用(即 - 谁正在访问哪些数据的记录等),出于安全原因,我宁愿让它们不被公开。有没有办法避免 Entity Framework 类以这种方式公开?

备注 : 这不是 How to prevent private properties in .NET entities from being exposed as public via services? 的副本.在那个问题中,用户希望有选择地显示某些字段,而我希望实体根本不作为 DataContract 公开。

提前致谢。

最佳答案

您是否知道您的实体不需要与数据库进行一对一映射?特别是,您可以省略不相关的列,甚至整个表。

实体模型旨在成为一个概念模型。您可以轻松地创建一组实体以暴露给一组客户端(可能是 Web 服务),而另一组则映射到同一数据库,用于不同的客户端(可能是 Web 应用程序)。

另一方面,我始终建议不要通过 Web 服务公开 Entity Framework 对象。不幸的是,Microsoft 通过使用 [DataMember] 标记来公开依赖于实现的属性。我刚刚尝试使用一个简单的服务从 AdventureWorks 返回 SalesOrderHeader。我的客户收到以下 EF 类型的代理版本:

  • EntityKeyMember
  • 结构对象
  • 实体对象
  • 实体 key
  • 实体引用
  • 相关结束

  • 这些不是您的客户需要了解的事情。

    我更喜欢公开数据传输对象,并将属性从一个复制到另一个。显然,通过反射或代码生成比手动更好地完成。我过去是通过代码生成完成的(T4 模板)。

    我还没有尝试过的一个选项是 AutoMapper .

    关于WCF、 Entity Framework 和数据契约,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1121877/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com