Как обновить запись по конкретному идентификатору в LINQ to SQL?
Обновление с использованием LINQ to SQL
Ответ 1
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);
}
Ответ 2
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;
}
Ответ 3
Update
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 Toys"
Dim product1 As New Product
category.ProductName = "Toy 1"
Dim product2 As New Product
category.ProductName = "Toy 2"
Ответ 4
При отсутствии более подробной информации:
using(var dbContext = new dbDataContext())
{
var data = dbContext.SomeTable.SingleOrDefault(row => row.id == requiredId);
if(data != null)
{
data.SomeField = newValue;
}
dbContext.SubmitChanges();
}
Ответ 5
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
Ответ 6
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();
Ответ 7
Я нашел обходное решение неделю назад. Вы можете использовать прямые команды с помощью "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
вы можете отправить запрос напрямую, со значением для конкретной записи, которую вы хотите обновить.
value = 0 → 0 - новое значение для записи;
code = {0} → - поле, в которое вы отправите значение фильтра;
Код → - новое значение для поля;
Я надеюсь, что эта ссылка поможет.