生成的 C# LINQ to SQL 类

Generated C# LINQ to SQL Classes

Visual Studio 将在我将 table 从服务器资源管理器拖到 DataClasses.dbml 后在 DataClasses.designer.cs 中自行生成代码。

如果table的名字以's'结尾,比如Books,VS会移除's'在class的名字和将 's' 保留为 属性 名称:

public System.Data.Linq.Table<Book> Books
{
    get
    {
        return this.GetTable<Book>();
    }
}

如果table不是以's'结尾的,比如Book,VS会保留class的名字,加上一个's' 属性 姓名:

public System.Data.Linq.Table<Book> Books
{
    get
    {
        return this.GetTable<Book>();
    }
}

然而我同事的VS只保留了名字:

Book: public System.Data.Linq.Table<Book> Book
Books: public System.Data.Linq.Table<Books> Books

我们用自己的电脑在同一个项目上工作。如果将新的 table 拖到 DataClasses.dbml 并保存,我的 VS 将更改他的旧代码:

public System.Data.Linq.Table<Book> Book

public System.Data.Linq.Table<Book> Books

以及他的所有代码,例如

DataClassesDataContext db = new DataClassesDataContext();
var book = db.Book;

会出错,因为现在它必须是:

var book = db.Books;

我该如何解决这个问题?

默认情况下,当您将名称以 s 或 ies 结尾的数据库对象从服务器 Explorer/Database 资源管理器拖到 Visual Studio 中的 LINQ to SQL 工具时,生成的实体 classes 从复数变为单数。这样做是为了更准确地表示实例化实体 class 映射到单个数据记录这一事实。例如,将 Customers table 添加到 O/R Designer 会生成名为 Customer 的实体 class,因为 class 将仅保存单个客户的数据。

如何:打开和关闭复数(O/R Designer):

https://msdn.microsoft.com/en-us/library/bb384507.aspx