Обновление с использованием LINQ to SQL - PullRequest
43 голосов
/ 26 мая 2009

Как я могу обновить запись по конкретному идентификатору в LINQ to SQL?

Ответы [ 7 ]

55 голосов
/ 26 мая 2009

LINQ - это инструмент запросов (Q = Query) - поэтому не существует волшебного способа LINQ для обновления только одной строки, кроме как через (объектно-ориентированный) контекст данных (в случае LINQ-to-SQL) , Чтобы обновить данные, вам нужно их извлечь, обновить запись и отправить изменения:

using(var ctx = new FooContext()) {
    var obj = ctx.Bars.Single(x=>x.Id == id);
    obj.SomeProp = 123;
    ctx.SubmitChanges();
}

Или напишите SP, который делает то же самое в TSQL, и выставьте SP через контекст данных:

using(var ctx = new FooContext()) {
    ctx.UpdateBar(id, 123);
}
19 голосов
/ 26 мая 2009
public bool UpdateCustomerIno(CustomerInfo toUpdate)
{
    bool successfullySaved = false;

    var db = new DataClasses1DataContext();
    try
    {
        var dbCstInfo = db.CustomerInfos
            .Where(w => w.CustomerID == toUpdate.CustomerID)
            .SingleOrDefault();

        if (dbCstInfo != null)
        {
            dbCstInfo.FirstName = toUpdate.FirstName;
            dbCstInfo.LastName = toUpdate.LastName;
            db.SubmitChanges();
            successfullySaved = true;
        }
    }
    catch {
        successfullySaved = false;
    }
    return successfullySaved;
}
8 голосов
/ 26 мая 2009

Обновление

NorthwindDataContext db = new NorthwindDataContext();

Product product = db.Products.Single(p => p.ProductName == "Toy 1");

product.UnitPrice = 99;
product.UnitsInStock = 5;

db.SubmitChanges(); 

Вставить

Dim db As New NorthwindDataContext

' Create New category and Products
Dim category As New Category
category.CategoryName = "Scott's Toys"

Dim product1 As New Product
category.ProductName = "Toy 1"

Dim product2 As New Product
category.ProductName = "Toy 2"
5 голосов
/ 26 мая 2009

При отсутствии более подробной информации:

using(var dbContext = new dbDataContext())
{
    var data = dbContext.SomeTable.SingleOrDefault(row => row.id == requiredId);
    if(data != null)
    {
        data.SomeField = newValue;
    }
    dbContext.SubmitChanges();
}
2 голосов
/ 15 марта 2013
 DataClassesDataContext dc = new DataClassesDataContext();

 FamilyDetail fd = dc.FamilyDetails.Single(p => p.UserId == 1);

 fd.FatherName=txtFatherName.Text;
        fd.FatherMobile=txtMobile.Text;
        fd.FatherOccupation=txtFatherOccu.Text;
        fd.MotherName=txtMotherName.Text;
        fd.MotherOccupation=txtMotherOccu.Text;
        fd.Phone=txtPhoneNo.Text;
        fd.Address=txtAddress.Text;
        fd.GuardianName=txtGardianName.Text;

        dc.SubmitChanges();
2 голосов
/ 26 мая 2009
AdventureWorksDataContext db = new AdventureWorksDataContext();
db.Log = Console.Out;

// Get hte first customer record
Customer c = from cust in db.Customers select cust where id = 5;
Console.WriteLine(c.CustomerType);
c.CustomerType = 'I';
db.SubmitChanges(); // Save the changes away
0 голосов
/ 03 мая 2011

Я нашел обходной путь неделю назад. Вы можете использовать прямые команды с "ExecuteCommand":

MDataContext dc = new MDataContext();
var flag = (from f in dc.Flags
                   where f.Code == Code
                   select f).First();
_refresh = Convert.ToBoolean(flagRefresh.Value);
if (_refresh)
{
    dc.ExecuteCommand("update Flags set value = 0 where code = {0}", Code);
}

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

значение = 0 -> 0 - новое значение для записи;

code = {0} -> поле, в которое вы отправите значение фильтра;

Код -> это новое значение для поля;

Надеюсь, эта справка поможет.

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