使用LINQ To SQL而不生成模型的存储库模式

时间:2009-07-09 15:34:23

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

我想在存储库模式中使用自己的Model类。我不想依赖于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等。 有没有人有资源?

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

我真的不明白为什么你需要从头开始实现一切。 但是如果你想在存储库上有更多的控件,你可以简单地使用 partial class 来实现它。

答案 2 :(得分:0)

如果你想让你的模型将linq替换成sql模型,你可以使用属性来装饰模型,这样你就可以基本定义自己的模型,并告诉linq如何使用datacontext(你必须建立)

示例:

[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>();

答案 3 :(得分:0)

我决定改用Fluent NHibernate。