Linq to SQL 通过 BLL 问题更新 - 最佳实践

Posted

技术标签:

【中文标题】Linq to SQL 通过 BLL 问题更新 - 最佳实践【英文标题】:Linq to SQL Updating through BLL issues - Best Practices 【发布时间】:2010-10-10 16:58:36 【问题描述】:

设置:

我有一个包含许多字段的大型表单,这些字段被收集以更新 Product 对象。因此,在 ASPX 页面中,用户更改需要更新的字段并点击提交。在后面的代码中我做了这样的事情;

Dim p as New MyCompany.Product()
p = p.GetProductById(ProductID)

我将 Linq 的 Product 部分类扩展为 SQL 以将这个方法(GetProductById)添加到对象中

p.Name = txtName.Text
p.SKU = txtSKU.Text
p.Price = txtPrice.Text
...    
p.Update()

这是扩展产品分部类中的更新方法。我更新数据库、发送电子邮件和更新历史记录表,所以我希望这种方法能够完成所有这些事情。

该项目还有 50 个字段,因此显然拥有一个收集所有 50 个字段的方法是荒谬的(而且我不想走那条路,因为调试 IMO 更难)

问题:

如果我使用 DataContext 通过 Linq to SQL 获取产品,那么我将永远无法再次更新它,因为它会出错,因为无法附加和已经附加到另一个 DataContext 的实体。

问题:

如果我通过 BLL 中的方法获取对象,在 ASPX 页面中更新它,然后尝试再次通过 BLL 发送更新以更新数据库,我应该如何做呢?

【问题讨论】:

【参考方案1】:

无论是否使用 LINQ-to-SQL,我都会这样做。提交后,我搜索项目(如果是使用 PK 的单个项目应该很快),我的 DAL 返回一个数据对象,我使用反射将页面中的每个元素映射到数据对象中的相应属性。我的 DAL 仅更新更改的项目。

我认为你必须做的是相同的,收集所有值并提交它们。如果 LinqToSql 不够聪明,无法确定发生了什么变化,那么它可能不是最好的选择。

【讨论】:

好吧,我现在不使用 Linq to SQL 是不可行的。我不能仅仅因为这个问题就回去重做我的整个应用程序。不过感谢您的回复。我会继续寻找特定于 Linq-to-Sql 的答案。

以上是关于Linq to SQL 通过 BLL 问题更新 - 最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

在 BLL 或 UI 中使用 Linq-to-SQL 实体?

使用 Linq To SQL 时,我是不是应该在 BLL 类中使用数据访问和业务逻辑

3 layered & Linq to Sql - 业务实体

使用 EF5 Linq to Entities 作为 DAL 到 BLL 到 ObjectDataSource

Linq to Sql-我可以构建一个通用的更新操作吗?

带有 XML 数据库字段的 Linq-to-SQL —— 为啥会这样?