【问题标题】:Automatically generating poco classes自动生成 poco 类
【发布时间】:2014-01-04 13:23:25
【问题描述】:

今天我检查了一些技术:T4 templatingautomapper

一些小规则:petapocosqlfuormlite

我了解这些技术提供的要点。我目前正在研究一个 3 层系统,我很想替换 DAL(位于它自己的数据服务器上的数据访问层)并将其与 mini ORM 集成,如图所示。但是,我暂时不会制定这样的计划。我们目前使用 .NET Remoting(早于 WCF)。

因此,我不想替换 DataServer 上的任何东西,而是想在应用程序服务器上扩展这些新技术之一。

我研究了 Entity Framework 如何根据上下文自动生成 POCO 类,这是在构建 EF 后手动完成的,我想知道我是否可以在不使用 EF 的情况下做同样的事情。

以下是当前正在发生的事情的事实:

  1. 将 sql 语句(或存储过程)发送到 DAL 以执行
  2. 通过 TCP 通道将 DataSet 或 DataTable 检索回应用程序

我的问题是,是否可以根据从 DataSet 发回的值使用关键字“var”和“dynamic”自动生成动态 POCO 类,并在运行时对其进行动态映射?上面提到的任何技术都有帮助吗?还是我必须先手动创建 POCO 类,然后对其进行映射?

如果应用程序知道 POCO 类应该有什么,手动创建 POCO 类并将其映射到后端 sql 表对我来说似乎有点多余。就像如果我在后端更新一个表会发生什么,那么我也必须更新与之关联的 POCO 类。我希望它对我来说是自动的。

【问题讨论】:

    标签: orm poco t4


    【解决方案1】:
    1. 如果您知道数据集在编译时,那么 T4 可能是一个选项。您可以编写一个 T4 脚本来下载数据库架构,并构造强类型实体类和数据库读/写方法。
    2. 至于后期绑定(运行时)类,一种选择是使用CustomTypeDescriptor 提供的运行时类型。您可以从服务器来回传递对象数组,并使用反射或其他技术来推断类型。

    如果您在编译时知道类型(在您的情况下听起来像),我认为应该清楚#1 更可取。运行时和动态应该只是最后的手段,因为它绕过了许多有价值的编译时类型检查。

    真的,如果您不想使用完整的实体框架,我建议您使用其中一种微 ORM,例如 Dapper 等。也就是说,除非你真的想重新发明轮子。

    【讨论】:

    • 谢谢你,我查了CustomTypeDescriptor,非常有用的工具。只是想知道,如果我在编译时知道数据集,为什么我不能手动创建一个 POCO 类?我知道当您在设计时编写代码时,T4 非常棒,其中更改代码的一个方面将在编译期间自动更改另一个方面,但就我而言,我在运行时从数据服务器返回一个数据集。所以选项 2 是我最好的选择。
    • 顺便说一句,我发现了一个使用 System.Dynamic.DynamicObject 的非常简洁的概念,我可以创建一个可以继承它的 POCO 类,并在运行时绑定任何尚未返回的属性以前存在过。
    • 实际上,发现 automapper 确实具有功能并且可以使用允许我进行映射的 ExpandoObject:stackoverflow.com/questions/14329356/…
    • 标记为答案,因为它帮助我朝着正确的方向前进,谢谢!
    • @sksallaj 好东西——我完全忘记了ExpandoObject。我主要使用 Silverlight,当然没有它。我也忘记了你可以在运行时使用 T4,尽管这看起来很麻烦,至少在这种情况下是这样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    • 2011-11-16
    • 1970-01-01
    • 2012-11-14
    • 2011-02-08
    • 2019-03-30
    • 1970-01-01
    相关资源
    最近更新 更多