【问题标题】:Can I use my own Model classes with Linq to SQL?我可以将我自己的模型类与 Linq to SQL 一起使用吗?
【发布时间】:2011-01-29 12:30:48
【问题描述】:

我有一个相当大的应用程序,我的数据访问策略一直很老套:

每个表有 4 个存储过程:TableName_Select、TableName_Insert、TableName_Update、TableName_Delete。

我的应用程序的每个逻辑域都有一个 MsSql#DOMAIN#Service 类。在那个类中,我有相应的方法来选择、插入、更新和删除数据库中的某些内容。

我想在一个单独的类库项目中维护我自己的模型类,以及 WCF 服务的服务合同。这使我能够仅引用来自例如的裸模型、服务合同和 WCF 服务客户端。 Web 应用程序或 Windows 应用程序。 (我也不使用自动生成的 WCF 服务客户端)

我是否可以将我自己的模型类与 Linq-to-SQL 一起使用 - 或者我必须使用来自 Linq-to-SQL 的自动生成的模型,然后在返回它们之前将它们映射到我的数据访问层中的我自己的模型通过 WCF 服务返回?

【问题讨论】:

    标签: wcf linq-to-sql


    【解决方案1】:

    EF Code First FTW!

    【讨论】:

      【解决方案2】:

      我们在应用程序中做了类似的事情。我们编写了自己的代码生成器来生成 L2S 类以及我们所谓的“应用程序”实体。这些比 L2S 类更轻量级。它们在应用程序级别用于将数据来回传递到我们的后端。每个 L2S 实体类都有一个内置的应用程序实体等价物,其中自动映射发生。我的意思是,只要 L2S 实体将数据存储到其属性中,这些值就会自动复制到相应的应用程序实体属性中。然后,我们在每个 L2S 实体上都有一个方法,允许我们检索关联的应用程序实体。

      所以,简短的回答是肯定的,您可以将自己的类与 L2S 实体结合使用。

      【讨论】:

        【解决方案3】:

        您不必将自动生成的类型与 Linq To Sql 数据上下文一起使用,但默认情况下,您使用的类型需要具有您将在其上看到的所有属性注释。

        但是,Linq to Sql 也支持自定义映射(默认使用属性),其中类型映射到表,它们的属性使用 MappingSource 映射到列,该 MappingSource 在构造时提供给 DataContext。

        L2S 带有两个 - AttributeMappingSource(隐式使用)和 XMLMappingSource。使用第二种方法,您可以手动启动一个 Linq To Sql DataContext,它公开您自己类型的 EntitySet。

        您甚至可以编写自己的 MappingSource - 但我认为 XML 可能满足大多数需求。

        【讨论】:

        • 我不这样做 - 我做的事情类似于@Randy 在他的回答中描述的方式。不过我都是通过接口来完成的。
        • 好的,我想我将使用 Linq to SQL 作为一种更快的方式来执行 CRUD 操作。在数据访问层将 LINQ 类映射到我自己的模型类。然后我可以保留我的模型,当我将列添加到类/表时,它可以避免我更新存储过程。
        猜你喜欢
        • 1970-01-01
        • 2010-12-14
        • 2019-06-18
        • 2011-02-20
        • 1970-01-01
        • 2011-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多