是否可以在不拖放的情况下使用Linq-SQL?
问题描述:
如果我想使用Linq-SQL,我还必须拖动数据库表到设计器表面来创建实体类。是否可以在不拖放的情况下使用Linq-SQL?
我总是喜欢我的应用程序完全控制,不喜欢由dotnet创建的类。
是否可以使用我自己的数据访问层实体类在Linq和数据库之间提供此连接?
我该怎么做?
答
您可以使用Linq-to-SQL非常轻松地编写自己的类 - 只需使用某些属性绘制类。
为例,这是一个非常简单的表我在我的项目之一,并将其与LINQ到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; }
}
的代码是很容易的,特别是如果你做您的房产名称与您的房间名称对齐(您不必)。
然后你只需要一个存储库连接到DB:
class CategoryRepository : ICategoryRepository
{
private Table<Category> categoryTable;
public CategoryRepository(string connectionString)
{
categoryTable = (new DataContext(connectionString)).GetTable<Category>();
}
}
当然还有更多,但是这表明你很基本,它不是很难,一旦你了解它做。这样你就可以100%地控制你的类,你仍然可以利用Linq-to-SQL。
我从学到了这个方法,ASP.NET MVC框架,一本很棒的书。
如果您想了解更多信息,我所有的Linq-to-SQL类都是从头开始编写的,您可以浏览here。
答
为避免拖动&下降,您可以查看SqlMetal.exe。
然而,这听起来像你真的是请求持久性无知,我不知道这是可能的L2S - 这当然是不可能的LINQ到实体直到.NET 4 ...
我曾经写过一个blog post on using SqlMetal.exe and subsequently modifying the generated schema - 也许你会觉得它很有用,尽管它有不同的动机。
答
我在CodeProject上找到了一些教程,介绍了如何做到这一点,包括如何以OO方式处理关系(M:M,1:M,M:1)并保持同步当你进行更新:
别忘记'使用System.Data.Linq.Mapping;' – naspinski 2009-12-07 12:04:50
以前的回答是在谈论“持久性无知”。你有问题吗? – Tebo 2009-12-07 13:04:25
我们可以交换电子邮件地址吗? – Tebo 2009-12-07 13:12:32