Запрос на обновление Linq - разве нет красивого способа? - PullRequest
0 голосов
/ 25 июля 2010

Я хочу обновить свою базу данных, используя запрос LINQ2SQL.

Однако, по некоторым причинам, это очень уродливая задача по сравнению с другим прекрасным кодом LINQ.

Запрос долженобновите две таблицы.

tbl_subscription
(
   id int,
   sub_name nvarchar(100),
   sub_desc nvarchar(500),
   and so on.
)

tbl_subscription2tags
(
   sub_id (FK to tbl_subscription)
   tag_id (FK to a table called tbl_subscription_tags)
)

Теперь, в моей функции обновления, отправьте сущность tbl_subscription с тегами и всем.

Я не могу найти красивый способ обновить свою базу данных ..

Я могу найти только уродливые примеры, когда мне внезапно приходится отображать все атрибуты ..

Существует самый разумный способ сделать это.Пожалуйста, помогите.

C # Пример, если возможно.

Я пробовал это без эффекта:

public void UpdateSubscription(tbl_subscription subscription)
    {
        db.tbl_subscriptions.Attach(subscription);
        db.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, subscription);
        db.SubmitChanges(System.Data.Linq.ConflictMode.FailOnFirstConflict);
    }

Исходный код для этого кода здесь: http://skyeyefive.spaces.live.com/blog/cns!6B6EB6E6694659F2!516.entry

Ответы [ 3 ]

1 голос
/ 25 июля 2010

Если я не понимаю вашу ситуацию, я думаю, что цитронас прав.

лучший и самый простой способ , который я нашел для обновления элементов базы данных через LINQ to SQL, этоследующее:

  1. Получить элемент , который вы хотите изменить из контекста данных
  2. Изменить все значения , которые вы хотите обновить
  3. Вызовите метод SubmitChanges() контекста данных.

Пример кода

Пример кода ниже предполагает, что у меня есть данныеконтекст с именем DBDataContext, который подключается к базе данных, содержащей таблицу Products с параметрами ID и Price .Кроме того, переменная productID содержит ID записи, которую вы хотите обновить.

using (var db = new DBDataContext())
{
    // Step 1 - get the item from the data context
    var product = db.Products.Where(p => p.ID == productID).SingleOrDefault();
    if (product == null) //Error checking
    {
        throw new ArgumentException();
    }

    // Step 2 - change whatever values you want to update
    product.Price = 100;

    // Step 3 - submit the changes
    db.SubmitChanges();
}
1 голос
/ 25 июля 2010

Почему бы просто не внести изменения в объекты и выполнить SubmitChanges для DataContext?

using(MyDataContext dc = new MyDataContext("ConnectionString"))
{
  foreach(var foo in dc.foo2)
  {
   foo.prop1 = 1;
  }
  dc.SubmitChanges();
}

В противном случае вам нужно больше рассказать нам о жизненном цикле объекта, которым вы хотите манипулировать

edit: забыл обернуть в скобки для использования

0 голосов
/ 17 сентября 2010

Я обнаружил, что вы можете использовать "Attach", как показано в моем вопросе, чтобы обновить таблицу, но, видимо, не вложенные таблицы.Поэтому я просто использовал несколько Attach, и это работало без необходимости проходить через параметры!

...