代码之家  ›  专栏  ›  技术社区  ›  swilliams

LINQ到SQL生成的对象可以解耦吗?

  •  11
  • swilliams  · 技术社区  · 17 年前

    我喜欢LINQ to SQL,但它生成的类似乎与存储它们的数据库紧密耦合,这似乎是一件坏事。

    Product 类被生成。我可以在任何其他层中使用这个类,这很好,但是如果我决定使用普通的旧ADO.NET(或switch数据库),我必须重新创建 产品 类,以及其他所有“模型”

    有办法解决这个问题吗?或者单独创建对象模型,然后将表映射到它们?我已经使用了提供的各种映射类,但还没有找到令人满意的答案。

    7 回复  |  直到 17 年前
        1
  •  6
  •   Zachary Yates    17 年前

    所有这些答案都没有链接!也许我能帮上忙:

    The attributes thing that damieng mentioned

    The partial class thing that Marcus King mentioned

    [Table(Name="Products")]
    public partial class Product: IProduct { }
    

    最后,如果你真的关心它,我会选择NHibernate(我也不太喜欢),这正是Garry Shulter所描述的。

    希望有帮助!

        2
  •  3
  •   Seth Petry-Johnson    17 年前

    如果坚持无知对你很重要,那么像NHIbernate这样的成熟ORM可能会更好地为你服务。

        3
  •  2
  •   yfeldblum    17 年前

    Linq到SQL(或EF)是

    NHibernate是您可能正在寻找的持久性。

        4
  •  2
  •   Garry Shutler    17 年前

    我最近通过自己创建POCO并手动为数据库创建XML映射文件实现了这一点。它需要一些手工工作,但能达到预期的效果。

    这里有一个 blog post I found useful

        5
  •  2
  •   swilliams    17 年前

    Rob Conery's screencasts on ASP.NET MVC . 诀窍在于 select 在LINQ to SQL查询中,将其转换为一个对象。

    public IQueryable<LinqExample.Core.Person> GetAll() {
        var people = from pe in this.db.Persons
                     select new Person {
                         Id = pe.id,
                         FirstName = pe.fname,
                         LastName = pe.lname,
                         Reports = this.GetReports(pe.id)
                     };
        return people;
    }
    

    Person 在代码中的其他位置初始化。 I blogged about it 更深入。

        6
  •  1
  •   Marcus King    17 年前

    Scott Hanselman在屏幕上谈到了asp.net DynamicData,他在其中使用Linq To Sql类。虽然他没有提到具体问题,但我认为总体概念仍然有效。他的方法是创建一个单独的 Product 在您的例子中,这是由dbml生成的。那你就应该有一个 类,该类存在于LINQ生成之外,只是“扩展”了它的功能。

        7
  •  0
  •   DamienG    17 年前

    只需将生成的代码复制到您自己的类中,然后关闭代码生成。魔法在于属性,而不是其他任何东西。

    或者,您可以编写自己的没有属性的普通CLR对象,并使用外部XML映射文件来描述对象与数据库之间的关系。更多信息可以在MSDN上的LINQ to SQL文档中找到。

    推荐文章