代码之家  ›  专栏  ›  技术社区  ›  Orson

是否可以在不拖放的情况下使用LinqSQL?

  •  5
  • Orson  · 技术社区  · 15 年前

    如果要使用LinqSQL,还必须将DB表拖到设计器图面以创建实体类。

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

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

    我该怎么做?

    3 回复  |  直到 15 年前
        1
  •  7
  •   naspinski    15 年前

    您可以非常容易地使用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框架 一本很棒的书。

    如果您想了解更多信息,我所有的linq-to-sql类都是从一开始就写在我的一个项目上的,您可以浏览 here .

        2
  •  1
  •   Mark Seemann    15 年前

    要避免拖放,您可以查看 SqlMetal.exe .

    不过,听起来你真的在要求对持久性的无知,我不确定L2S是否可能做到这一点-在.NET 4之前,Linq to实体当然不可能做到这一点…

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

        3
  •  1
  •   Abby Fichtner    15 年前

    我有几个关于codeproject的教程,介绍了如何做到这一点,包括如何以面向对象的方式处理关系(m:m、1:m、m:1),并在进行更新时保持它们的同步:

    A LINQ Tutorial: Mapping Tables to Objects

    A LINQ Tutorial: Adding/Updating/Deleting Data