【问题标题】:Repository Pattern using LINQ To SQL without generated Models使用没有生成模型的 LINQ To SQL 的存储库模式
【发布时间】:2009-07-09 15:34:22
【问题描述】:

我想在存储库模式中使用我自己的模型类。我不想依赖 LINQ to SQL 生成的类。这可行吗?我该如何处理Where(以及当它是Func<MyModel, bool> 但LINQ to SQL 需要Func<LinqToSqlModel, bool> 时的其他选择?

我已经设计了这个,但我可能开始过度设计它......

interface IModelConverter<T1, T2>
{
  T2 Convert(T1 item);
  T1 Convert(T2 item);
}

这是不是重定向太多了?

我想要做的就是拥有一个MyModel 的存储库,它能够在后端进行任何实现,无论是 LINQ to SQL、LINQ to Enities 等。 谁有资源?

【问题讨论】:

    标签: linq-to-sql model repository-pattern


    【解决方案1】:

    我认为您在这里创建了很多开销。 Linq to Sql 生成的所有类都是部分的,因此如果您正确设置命名空间,您可以使用您想要的任何信息扩展这些类。如果您想隐藏任何内容,请在 dbml 中将其访问级别设置为 internal

    我真的不建议完全重写这些类。

    【讨论】:

      【解决方案2】:

      我真的不明白为什么您需要从头开始实施所有内容。 但是,如果您想对存储库进行更多控制,您可以简单地使用 partial class 来实现。

      【讨论】:

        【解决方案3】:

        如果您希望您的模型替换 linq to sql 模型,您可以使用属性装饰您的模型,这允许您基本上定义自己的模型,并告诉 linq to sql 如何将您的模型与数据上下文(您也必须构建)

        例子:

        [Table(Name="SomeTable")]
        public class SomeClass
        {
            [Column(IsPrimaryKey=true, IsDbGenerated=true, AutoSync=AutoSync.OnInsert)]
            internal int MyID {get; set;}
        
            [Column]
            public String MyString {get; set;}
        }
        

        然后您可以创建一个 DataContext 并告诉它如何处理您的模型,如下所示:

        var context = new DataContext(connectionString);
        context.GetTable<SomeClass>();
        

        【讨论】:

        • 我不希望我的模型耦合得如此接近 linq to sql。
        【解决方案4】:

        我决定改用 Fluent NHibernate。

        【讨论】:

          猜你喜欢
          • 2011-04-29
          • 1970-01-01
          • 1970-01-01
          • 2012-02-21
          • 1970-01-01
          • 1970-01-01
          • 2010-12-12
          • 2010-09-23
          • 1970-01-01
          相关资源
          最近更新 更多