0

我正在尝试使用 LINQ to SQL (DBML) 更新实体/模型。但我做不到。

这是我的代码片段。

public void Update(Customer customer)
{
    using (MyDataContext db = new MyDataContext())
    {
        db.Customers.Attach(customer, true);
        db.SubmitChanges();
    }
}

public Customer GetByID(int ID)
{
    using (MyDataContext db = new MyDataContext())
    {
        return db.Customers.FirstOrDefault(c => c.CustomerID == ID);
    }
}

我的场景是:我获取客户对象并将客户对象绑定到表单。并在更改表单输入数据后。数据完全改变了,但是当我调用更新方法时。它没有更新它,我有这个错误:

如果实体声明了版本成员或没有更新检查策略,则实体只能在没有原始状态的情况下附加为已修改。

我搜索了很多互联网,但找不到任何合适的解决方案。我还像这样修改了我的更新功能:

public void Update(Customer customer)
{
    using (MyDataContext db = new MyDataContext())
    {
        var originalCustomer = db.Customers.FirstOrDefault(c => c.CustomerID == customer.CustomerID);
        db.Customers.Attach(customer, originalCustomer);
        db.SubmitChanges();
    }
}

但仍然得到同样的错误。

我不想从数据库中获取客户并从参数客户属性中更新它的属性。我想使用相同的参数 customer 并在数据库中更新它。

请帮我。谢谢!

4

3 回答 3

0

问题是您有两个 using 语句,提供 2 个不同的上下文 更简单的选择是将其注入控制器并在需要时使用它

于 2016-06-19T10:07:42.947 回答
0

问题是即使您使用相同的 DbContext,您也使用不同的 DbContext对象,因为您使用的是两个不同的“使用”语句。

在整个请求中使用相同的 DbContext 对象很重要(假设它是一个 MVC 应用程序)。

通常的方法是在控制器中实例化 DbContext (或使用 Dependency Injection )并在任何地方使用引用。

于 2016-06-19T09:37:56.423 回答
-1
public void Update(Customer customer)  
{  
using (MyDataContext db = new MyDataContext())  
{  
    var originalCustomer = db.Customers.Where(c => c.CustomerID == customer.CustomerID).FirstOrDefault();  
   // change the originalCustomer's properties with customer's properties. 
    db.SubmitChanges();  
}  
}
于 2016-06-19T07:47:44.343 回答