обновление записи базы данных с помощью linq для sql в c # - PullRequest
1 голос
/ 23 декабря 2011

У меня есть функция, которая выглядит следующим образом:

public UpdateRecord(MyObjectModel TheObject, int TheUserID)
{
  using (MyDataContextModel TheDC = new MyDataContextModel())
  {
     var TheObjectInDB = (from o in TheDC.TheObjects
                          where o.ObjectID == TheObject.ObjectID
                          select new MyObjectModel()).SingleOrDefault();

     if (TheObject.Prop1 != null) { TheObjectInDB.Prop1 = TheObject.Prop1; }
     if (TheObject.Prop2 != null) { TheObjectInDB.Prop2 = TheObject.Prop2; }

     TheDC.SubmitChanges();
  }
}

Код не падает, но не обновляет БД.Что мне нужно изменить?

Ответы [ 3 ]

3 голосов
/ 23 декабря 2011

выберите o вместо нового MyObjectMode (), измените:

var TheObjectInDB = (from o in TheDC.TheObjects
                          where o.ObjectID == TheObject.ObjectID
                          select o).SingleOrDefault();
2 голосов
/ 23 декабря 2011

Прежде всего, вы делаете select new MyObjectModel() в своем запросе, который всегда создает новый объект с учетом того, что вы извлекаете из базы данных. Измените это на select o.

Во-вторых, в:

if (TheObject.Prop1 != null) { TheObjectInDB.Prop1 = TheObject.Prop1; }
if (TheObject.Prop2 != null) { TheObjectInDB.Prop2 = TheObject.Prop2; }

вы обновляете значения объекта условно. Поэтому, если Prop1 и Prop2 равны нулю, свойства объекта не будут обновляться.

1 голос
/ 23 декабря 2011

Следующий код работает, и он почти такой же, как вы опубликовали.

DataContext dc = new DataContext(ConnectionString);
var q = from a in dc.GetTable<Employee>()
        where a.EmployeeID == this.EmployeeID
        select a;
Employee temp = q.Single<Employee>();
temp.EmployeeActiveStatus = this.EmployeeActiveStatus;
temp.EmployeeName = this.EmployeeName;
temp.EmployeeUserID = this.EmployeeUserID;
temp.EmployeeCreateModifyDate = this.EmployeeCreateModifyDate;
temp.EmployeePaperWork = this.EmployeePaperWork;
dc.SubmitChanges();

Единственное существенное отличие, которое я вижу, это строка: выберите новый MyObjectMode ()). SingleOrDefault ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...