0

我有一个数据访问层,它创建一个上下文并检索数据(没有对象跟踪)并将信息传递回 UI 层:-

我的工作单元是一个方法,我在执行特定方法后发布 appdatacontext。所以我没有在任何地方跟踪数据上下文..

public  LinqObject GetObject(){
  using (appdatacontext = new DataContext()){ 

---code to select and return object
   }
}

我将使用 UI 中的表单修改数据并将我的数据提交回 DB。

两种方法是:-

1. Detach and reattach to a different data context using [Detach..Serialise and Attach]

 *I have to do a lot of plumping code to enable this functionality* 

2. Get the DB object using primary key and make changes in the selected object and SubmitChanges.

哪一个是完成这项任务的更好方法?

我完全反对将工作单元移动到数据访问层或 Web 应用程序生命周期 (httpcontext),因为我不想跟踪更改并使用不需要的填充代码使整个应用程序结构复杂化。我只是使用 LINQ 来轻松地检索和更新数据库。

我从未见过有人在 LINQ 上下文中讨论这两种方法,这就是我要求最佳实践的原因。

4

2 回答 2

1

如果您因为性能原因不想使用 (2):另一种选择是附加一个新对象以提交更新。

Foo foo=new Foo { FooId=fooId }; // create obj and set keys
context.Foos.Attach(foo);
foo.Name="test";
context.SubmitChanges();

在这里查看我的答案

于 2013-05-10T06:56:01.370 回答
0

根据@Chris 的评论。我终于找到了解决方案,例如:-

function void SaveRow(Table.RowObject object) {

  var original=null;

  using (context= new DataContext())
        {

            context.ObjectTrackingEnabled = false;
            original = {query}.Single();

        }
        using(context=new DataContext()){
            try
            {
                context.Table.Attach(object, original);
                context.SubmitChanges();
            }
            catch (Exception exception) {

                saveStatus = false;

            }
        }

}

我保留了更新检查以确保进行并发检查,如果我禁用它,我可以减少 Linq 生成的 where 语句的数量。

于 2013-05-10T10:26:54.997 回答