Как указано в заголовке, сколько методов доступно?
У меня просто такой случай: я получаю объект сущности из одного 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);
ИЛИ
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» в приведенном выше коде.
Существуют ли другие методы для достижения этой цели? Или другой лучший метод, который вы знаете об этом? Или любое официальное решение по этой теме?
Огромное спасибо.