如标题所述,有多少种方法可用?
我只是有这种情况:我从一个 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”。
有没有其他方法可以达到这个目的?或者你知道的其他更好的方法?或者关于这个话题的任何官方解决方案?
非常感谢。