将 LINQ 子类化为 SQL 数据实体 - 坏主意或缺少某些内容
本文关键字:子类 LINQ SQL 实体 数据 | 更新日期: 2023-09-27 17:56:37
我希望能够将自动生成的 LINQ 子类化为 SQL 数据类,并保存对所述对象的更改。
例如,如果我的数据库中有一个表Client
,我可以创建扩展类Client
的ClientBO
,并添加诸如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();
问题是您要更改的对象不再是从数据存储中获取的对象。
数据上下文跟踪对其附加的所有对象的更改。但是,由于您永远不会更改所引用的"源"对象,因此数据上下文永远不会收到更改通知
我建议你把你的ClientBO
变成Client
的部分类(当然,把它重命名为客户端)。所有 Linq-To-Sql 类都作为部分类生成,因此您可以通过这种方式轻松扩展它们
喜欢这个:
public partial class Client
{
public void GenerateInvoice()
{
// ... etc ...
}
}
List<Client> clientList = MyDatabaseContext.Clients.ToList();
clientList[ someIndex ].SomeField = NewValue;
MyDatabaseContext.SubmitChanges();
我认为您真正想要的是一些扩展方法:
http://msdn.microsoft.com/en-us/library/bb383977.aspx
它们看起来像是类的一部分,但您可以在不同的模块中实现它们。 正是你想要的。