タイトルで述べたように、利用可能なメソッドはいくつありますか?
1 つの 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 テーブルのすべての列を更新しますが、2 番目の方法では、"UrlString" 列のみを更新する SQL スクリプトを提供します。
両方とも、データベースから一時エンティティ オブジェクトを取得する必要があります。これは、上記のコードの 't' です。
この目的を達成するための他の方法はありますか? または、それについて知っている他のより良い方法はありますか?または、このトピックに関する公式の解決策はありますか?
どうもありがとう。