我希望能够对自动生成的 LINQ to SQL 数据类进行子类化,并保存对所述对象的更改。
例如,如果我的数据库中有一个表 Client
,我可以创建 ClientBO
扩展类 Client
,并添加如下行为GenerateInvoice()
或其他。一切正常,直到我想更新子类中的值或插入新记录。这样的更改(可以预见?)被丢弃。是不是我遗漏了什么,或者我是否首先通过创建这些子类违反了 LINQ to SQL 或 OO 原则?
以下是我的代码的简化示例:
public class ClientBO : Client
{
public ClientBO( Client source ) : base()
{
FirstName = source.FirstName;
Lastname = source.LastName;
// ... etc ...
}
}
List<ClientBO> clientList =
( from client in DatabaseContext.Clients select new ClientBO( client ) ).ToList();
clientList[ someIndex ].SomeField = NewValue;
MyDatabaseContext.SubmitChanges();
最佳答案
问题是您正在更改的对象不再是从数据存储中获取的对象。
DataContext 跟踪对其附加的所有对象的更改。但是由于您永远不会更改您引用的“源”对象,因此数据上下文永远不会收到更改通知
我建议您将 ClientBO
改为 Client
的部分类(当然,将其重命名为 Client)。所有 Linq-To-Sql 类都是作为部分类生成的,因此您可以通过这种方式轻松扩展它们
像这样:
public partial class Client
{
public void GenerateInvoice()
{
// ... etc ...
}
}
List<Client> clientList = MyDatabaseContext.Clients.ToList();
clientList[ someIndex ].SomeField = NewValue;
MyDatabaseContext.SubmitChanges();
关于c# - 将 LINQ to SQL 数据实体子类化 - 坏主意还是遗漏了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6036254/