【问题标题】:Transforming Linq To Sql DataContext objects to DataContract objects将 Linq To Sql DataContext 对象转换为 DataContract 对象
【发布时间】:2010-11-23 18:56:11
【问题描述】:

我有从 dbml 生成的 DataContext 类。从数据库中获取数据后,我需要将它们转换为 DataContract 类,以便可以通过 WCF 发送对象。

一种方法是这样的:

using (var dc = new TestDBL2SDataContext(Settings.Default.TestDBConnectionString))
        {
            var myEmp = from rec in dc.Employees
                    select new MyDataContracts.Employee 
                             { 
                               FirstName = rec.Name.Substring(0,10) 
                             };
            return myEmp.FirstOrDefault();;
        }

有没有更好的方法通过我可以在我的项目中定义并简单地指向的 XSD/XSLT 文件来做到这一点?

【问题讨论】:

    标签: c# linq-to-sql datacontext datacontract


    【解决方案1】:

    打开 dbml 文件,选择设计器并在属性窗口中将序列化模式设置为单向,这就是通过 WCF 发送从数据上下文返回的员工记录所需的全部内容。

    我希望你在寻找什么。

    【讨论】:

    • 不。 datacontract 类可能与 datacontext 类不同 - 属性可能会被转换、展平等。我想通过 xml 文件而不是代码来做这个转换 - 我假设它更干净而不是我自己编写或使用一些 3rd派对代码。
    【解决方案2】:

    我们为此编写了Translator<FromDataModelType, ToDataContractType> 类,并使用AutoMapper 作为完成属性之间映射的快捷方式。

    这假设您需要对 DataContext 类应用转换,就像您通过将 Name 的子字符串分配给 FirstName 所做的那样。

    【讨论】:

    • 是的,我需要通过子字符串将 Name 转换为 Firstname(例如)。我看到 AutoMapper 肯定会有所帮助。但是想知道我是否可以使用定义映射的 XML 文件并简单地调用它。这可能吗?
    • @DeeStackOverflow 不在 Automapper 中,它不是。来自主要开发人员:"No. XML is the devil." :) 该线程中的另一个用户建议将otis-lib 作为替代方案,但我从未尝试过。
    • 嗯...您似乎表示社区不太建议使用 xml。感谢您的提示。
    • 我很高兴,但我并不是要暗示除 Automapper 的作者之外的任何人都建议避免使用 XML 进行映射。 :)
    【解决方案3】:

    在 dbml 设计器中,将序列化模式设置为单向。任务完成。

    如果您需要稍微不同的 DTO 层,也许 AutoMapper 是一个不错的选择。

    【讨论】:

    • 我需要应用一些属性转换。它必须是一个新的 DataContract 类,它可能会扁平化数据。
    猜你喜欢
    • 1970-01-01
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    • 2023-04-02
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多