제목에서 언급했듯이 몇 가지 방법을 사용할 수 있습니까?anthoer ObjectContext에서 분리 된 엔티티 객체를 연결하는 가장 좋은 방법은 무엇입니까?
나는이 경우를 가지고있다 : 한 ObjectContext에서 엔티티 객체를 얻은 다음 OjbectContext 객체에서 엔티티 obejct를 분리하고 리턴한다.
나중에이 개체를 약간 변경하면 데이터베이스에 변경 내용을 다시 저장하고 싶습니다. 이런 식으로 써야한다고 생각해. 그렇지? (음, 이것은 나를 위해 작동합니다.)
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'인 데이터베이스에서 임시 엔티티 개체를 검색해야합니다.
이 목적을 달성하는 다른 방법이 있습니까? 또는 당신이 그것에 대해 알고있는 다른 더 나은 방법? 또는이 주제에 관한 공식 해결책?
많은 감사.
안녕 Ladislan, 답장을 보내 주셔서 감사합니다. 하지만 'ObjectContext는 동일한 EntityKey를 가진 두 개의 엔티티 객체를 가질 수 없습니다'와 같은 첫 번째 코드 던져 예외가 발생합니까? 나는 새로운 ObjectContext 인스턴스에 엔티티를 직접 부착 할 때 항상이 예외를 얻는다. –