如果我想使用Linq-SQL,我还必须将DB Table拖到设计器表面来创建实体类。
我总是喜欢在我的应用程序中完全控制,并且不喜欢dotnet创建的类。
是否可以使用我自己的数据访问层实体类在Linq和DB之间提供此连接?
我怎样才能完成它?
答案 0 :(得分:7)
您可以使用Linq-to-SQL轻松编写自己的类 - 只需要使用一些属性绘制类。
例如,这是我在其中一个项目中使用的一个非常简单的表,它可以很好地与Linq-to-SQL一起使用:
[Table(Name = "Categories")]
public class Category : IDataErrorInfo
{
[Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)]
public int Id { get; set; }
[Column] public string Name { get; set; }
[Column] public string ExtensionString { get; set; }
}
代码非常简单,特别是如果你的属性名称与你的表名一致(你不必)。
然后您只需要一个存储库来连接数据库:
class CategoryRepository : ICategoryRepository
{
private Table<Category> categoryTable;
public CategoryRepository(string connectionString)
{
categoryTable = (new DataContext(connectionString)).GetTable<Category>();
}
}
当然还有更多内容,但这会向您展示非常基础,一旦您了解它就不难做到。这样,您可以100%控制您的类,并且您仍然可以利用Linq-to-SQL。
我从 Pro ASP.NET MVC Framework 中学到了这种方法,这是一本很棒的书。
如果您想了解更多信息,我的所有Linq-to-SQL课程都是从头开始编写的,我可以浏览一个项目here。
答案 1 :(得分:1)
避免拖累和你可以看一下SqlMetal.exe。
但是,听起来你真的要求持久性无知,而且我不确定L2S是否可行 - 在.NET 4之前,LINQ to Entities肯定是不可能的......
我曾写过一篇blog post on using SqlMetal.exe and subsequently modifying the generated schema - 也许你会觉得它有用,虽然它有不同的潜在动机。
答案 2 :(得分:1)
我在CodeProject上有一些教程,介绍了如何执行此操作,包括如何以OO方式处理关系(M:M,1:M,M:1)并使它们保持同步你做了更新: