1

使用LINQ-to-SQLEntity Framework时,我可以轻松地为每个处理 CRUD 基础的生成一个类:

Info info = new Info();
info.Title = "testing";
db.Infos.InsertOnSubmit(info);
db.SubmitChanges();

并且当我对数据库表进行结构更改时,我可以轻松地重新生成表的模型类(只需在设计器中将其删除并再次将表拖到设计器中)。但是,这当然会覆盖课堂上的所有内容。

因此,为了给每个在我重新生成模型时不会被删除的类添加额外的功能,我发现自己为每个表都有一个额外的模型类,因此两个数据层有效。

这是常见的做法还是有办法向生成的类添加功能,在类的重新生成时不会被覆盖?

4

2 回答 2

6

创建一个具有相同名称的部分类(在不同的源代码文件中)并将您想要的任何扩展功能放在那里。

于 2009-11-03T08:40:33.847 回答
2

和描述的一样?不,这不对。

您可以通过使用部分类添加额外的功能来解决问题。部分类放在一个单独的文件中,因此当您在设计器中删除并重新创建类时,您的代码会保留下来,并且就像魔术一样被附加。

所以,如果你有一个模型:

MyDataClasses.dbml

这又具有文件:

MyDataClasses.dbml.layout
MyDataClasses.designer.cs

添加以下文件(如果您对 .dbml 文件执行“查看代码”,Visual Studio 将为您执行此操作):

MyDataClasses.cs

在此您可以扩展 DataContext 以在修改数据时添加行为:

partial void InsertBooking(Booking instance)
{
    instance.LastModified = DateTime.Now;
    if (this.AuditUserID.HasValue)
    {
        instance.LastModifiedByID = this.AuditUserID;
    }

    this.ExecuteDynamicInsert(instance);
}

partial void UpdateBooking(Booking instance)
{
    instance.LastModified = DateTime.Now;
    if (this.AuditUserID.HasValue)
    {
        instance.LastModifiedByID = this.AuditUserID;
    }

    this.ExecuteDynamicUpdate(instance);
}

以及用于添加行为、计算字段等的单个类。如果您采用 ASP.NET 动态数据之类的东西,您还可以在其中为元数据添加注释和类,这可能会变得非常复杂。

于 2009-11-03T08:49:13.783 回答