Как указано в заголовке, сколько методов доступно?
У меня просто есть такой случай: я получаю объект сущности из одного ObjectContext, а затем отсоединяю объект сущности от объекта OjbectContext и возвращаю его.
Позже, если я внесу некоторые изменения в этот объект и захочу сохранить изменения обратно в базу данных. Я думаю, что я должен написать так, верно? (Ну, это работает для меня.)
public Url GetOneUrl()
{
Url u;
using(ServicesEntities ctx = new ServicesEntities())
{
u = (from t in ctx.Urls select t).FirstOrDefault<Url>();
ctx.Detach(u);
}
return u;
}
public void SaveToDB(Url url)
{
using(ServicesEntities ctx = new ServicesEntities())
{
var t = ctx.GetObjectByKey(_Url.EntityKey) as Url;
ctx.Detach(t);
ctx.Attach(url);
ctx.ObjectStateManager.ChangeObjectState(url, System.Data.EntityState.Modified);
ctx.SaveChanges();
}
}
Url url = GetOneUrl();
url.UrsString = "http://google.com"; //I just change the content.
SaveToDB(url);
OR
public void SaveToDB(Url url)
{
using(ServicesEntities ctx = new ServicesEntities())
{
var t = ctx.GetObjectByKey(_Url.EntityKey) as Url;
t = url; //this will make t.UrlString becomes "http://google.com"
ctx.ApplyCurrentValues<Url>("Urls", t);
ctx.SaveChanges();
}
}
Этот способ также работает для меня.
Первый способ - создание оператора sql для обновления всех столбцов таблицы Url, а второй - сценарий sql для обновления только столбцов «UrlString».
Им обоим нужно будет извлечь временный объектный объект из базы данных, который в коде выше обозначен буквой 't'.
Существуют ли другие способы достижения этой цели? Или другой лучший метод вы знаете об этом? Или какое-нибудь официальное решение по этой теме?
Большое спасибо.