是否可以在没有拖放的情况下使用Linq-SQL?

时间:2009-12-07 11:38:10

标签: sql linq linq-to-sql

如果我想使用Linq-SQL,我还必须将DB Table拖到设计器表面来创建实体类。

我总是喜欢在我的应用程序中完全控制,并且不喜欢dotnet创建的类。

是否可以使用我自己的数据访问层实体类在Linq和DB之间提供此连接?

我怎样才能完成它?

3 个答案:

答案 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)并使它们保持同步你做了更新:​​

A LINQ Tutorial: Mapping Tables to Objects

A LINQ Tutorial: Adding/Updating/Deleting Data