2012-03-20 7 views
0

웹 애플리케이션에 EF4를 사용하고 있습니다.EF4 - Sproc이 데이터를 업데이트하지만 EF에서 데이터가 업데이트되지 않습니다.

내 데이터 액세스에 LINQ to EF를 사용하고있는 시간의 99 %이지만 호출 중 하나는 sproc이어야합니다. 다음과 같이 보입니다 :

object[] params = { new SqlParameter("SomeId", someId), 
        new SqlParameter("OtherId", otherId)}; 
db.Database.ExecuteSqlCommand("dbo.spMySproc @SomeId, @OtherId", parms); 
db.SaveChanges(); 

sproc가 실행되면 데이터가 업데이트됩니다. 그러나 EF의 데이터가 업데이트되지 않는 경우. 나는 이것이 expected behavior이라는 것을 알게되었습니다. 또한 learned은 ObjectContext에 .Refresh 메서드가 있지만 내 데이터베이스 엔터티 개체는 DbContext에서 상속받습니다.

이 sproc을 실행 한 후에 내 EF4 데이터베이스를 새로 고치는 방법이 있습니까? . 당신이 기능을 사용해야 할 때마다

"DbContext가 ObjectContext를 래핑하고 간단하고 직관적 인 API를 사용하여 ObjectContext는 가장 일반적으로 사용되는 기능을 노출 당신은 기본 ObjectContext를 액세스 할 수 있습니다

답변

1

케이시가 어느 정도 정확하지만, 당신이 그것을 그가 나타내는 방법에 액세스 할 수 없습니다. DbContext를 IObjectContextAdapter에 캐스트하면 ObjectContext에 액세스 할 수 있습니다.

var oc = myContext as IObjectContextAdapter; 
if (oc != null)  
    oc.ObjectContext.Refresh() 

그러나 이것은 아마도 사물을 이동하는 올바른 방법이 아닙니다. 귀하의 문제는 당신이 귀하의 애플 리케이션에서 하나의 DbContext를 사용하고 있다고 의심됩니다. DbContext는 단일 작업을 수행하도록 설계된 다음 파손됩니다. 당신은 .. 완료되면 그것을 destorying, 각 작업에 대한

using(var db = new MyDbContext()) { 
    object[] params = { new SqlParameter("SomeId", someId), 
       new SqlParameter("OtherId", otherId)}; 
    db.Database.ExecuteSqlCommand("dbo.spMySproc @SomeId, @OtherId", parms); 
    //db.SaveChanges(); - This is irrelevant 
} 
+0

내 질문에 대한 답변을 주셔서 감사합니다. 그리고 나서 제 질문에 대한 실질적인 문제를 해결해 주셔서 감사합니다. –

1

DbContext에 대한 문서는이 다음 말한다 DbContext에서는 지원되지 않습니다. 자세한 내용은 지원되지 않는 기능을 참조하십시오. " 당신이 뭔가를 할 수 있는게 틀림 없어

:

DbContext.ObjectContext.Refresh(RefreshMode, Obj) 
+0

하지 아주 쉬운 .. –

+0

@MystereMan, 따라서 "같은 것을"새 DbContext을 만들어야합니다. :) –

관련 문제