是否可以在不拖放的情况下使用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

+0

别忘记'使用System.Data.Linq.Mapping;' – naspinski 2009-12-07 12:04:50

+0

以前的回答是在谈论“持久性无知”。你有问题吗? – Tebo 2009-12-07 13:04:25

+1

我们可以交换电子邮件地址吗? – Tebo 2009-12-07 13:12:32

为避免拖动&下降,您可以查看SqlMetal.exe

然而,这听起来像你真的是请求持久性无知,我不知道这是可能的L2S - 这当然是不可能的LINQ到实体直到.NET 4 ...

我曾经写过一个blog post on using SqlMetal.exe and subsequently modifying the generated schema - 也许你会觉得它很有用,尽管它有不同的动机。

+0

谢谢,但耐人寻味。 – Tebo 2009-12-07 11:47:21

+0

请问,“持久性无知”是什么意思? – Tebo 2009-12-07 11:54:17

我在CodeProject上找到了一些教程,介绍了如何做到这一点,包括如何以OO方式处理关系(M:M,1:M,M:1)并保持同步当你进行更新:

A LINQ Tutorial: Mapping Tables to Objects

A LINQ Tutorial: Adding/Updating/Deleting Data