通过 BLL 问题进行 Linq to SQL 更新 - 最佳实践
设置:
我有一个大型表单,其中包含许多字段,收集这些字段是为了更新 Product 对象。 因此,在 ASPX 页面中,用户更改了需要更新的字段,然后点击提交。 在后面的代码中我做了这样的事情;
Dim p as New MyCompany.Product()
p = p.GetProductById(ProductID)
我将 Linq to SQL 的 Product 分部类扩展为将此方法 (GetProductById) 添加到对象。
p.Name = txtName.Text
p.SKU = txtSKU.Text
p.Price = txtPrice.Text
...
p.Update()
这是扩展的 Product 分部类中的 Update 方法。 我更新数据库,发送电子邮件并更新历史表,所以我希望这个方法可以完成所有这些事情。
该项目还有 50 个字段,因此显然有一个收集所有 50 个字段的方法是荒谬的(而且我不想走这条路,因为在我看来调试起来更困难)
问题:
那么我永远无法再次更新它,因为它会出现无法附加已附加到另一个 DataContext 的实体的错误。
问题:
所以,如果我通过 BLL 中的方法获取对象,在 ASPX 页面中更新它,然后尝试再次通过 BLL 发送更新以更新数据库,我应该如何处理做这个?
The Setup:
I have a large form with many fields that are collected to update a Product object. So in the ASPX page the user changes the fields that need updating and they hit submit. In the code behind I do something like this;
Dim p as New MyCompany.Product()
p = p.GetProductById(ProductID)
I extend the Product partial class of Linq to SQL to add this method (GetProductById) to the object
p.Name = txtName.Text
p.SKU = txtSKU.Text
p.Price = txtPrice.Text
...
p.Update()
This is an Update method in the extended Product partial class. I update the database, send emails and update history tables so i want this method to do all those things.
There are 50 more fields for the project so obviously it would be ridiculous to have a method that collects all 50 fields (and I don't want to go that route anyway bc it's harder to debug IMO)
The Problem:
If I get the Product via Linq to SQL using a DataContext then I can never update it again because it errors about not being able to attach and entity that's already attached to another DataContext.
The Question:
SO if I get an object through a method in my BLL, update it in the ASPX page and then try to send the updates through the BLL again to update the database, how should I go about doing this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
不管是否使用 LINQ-to-SQL,这就是我所做的。 提交后,我搜索该项目(如果它是使用 PK 的单个项目,那么应该很快),我的 DAL 返回一个数据对象,然后我使用反射将页面中的每个元素映射到数据对象中的相应属性。 我的 DAL 仅更新已更改的项目。
我认为你要做的事情是一样的,收集所有值并提交它们。 如果 LinqToSql 不够智能,无法确定更改的内容,那么它可能不是最佳选择。
Regardless of LINQ-to-SQL or not, here's what I do. Upon submission, I search for the item (it should be quick if it is a single item using the PK), my DAL returns a data object, and I use reflection to map each element in the page with corresponding properties in the data object. My DAL only updates items that changed.
I think what you have to do is the same, gathering all values and submitting them. If LinqToSql is not smart enough to determine what changed then it may not be the best alternative.