2012-05-17 6 views
1

VS 2011 Beta 및 EF로 실험 중이며 UpdateEntity에 문제가 있습니다. 그러나 InsertEntity 및 DeleteEntity가 올바르게 작동합니다.DbDataConttoller UpdateEntity가 예외를 throw합니다.

문제는 UpdateEntity를 호출 할 때 "개체 참조가 개체의 인스턴스로 설정되지 않았습니다."예외가 발생한다는 것입니다.

내 프로젝트의 모든 모델에서 발생하는 것으로 보입니다.

문제를 격리하기 위해 기본 속성을 가진 정말 간단한 DTO 클래스를 만들었지 만 해당 개체에서 UpdateEntity를 호출 할 때 동일한 오류가 발생합니다.

테스트 DTO :

[Table("Test")] 
public class Test 
{ 
    [Key, Column] 
    public int Id { get; set; } 

    [Column] 
    public string TestMember { get; set; } 
} 

나는 다음과 같은 방법으로 DbDataController있어 : 여기 내 코드의 마지막

public void InsertTest(Test entity) 
    { 
     InsertEntity(entity); 
    } 

    public void UpdateTest(Test entity) 
    { 
     UpdateEntity(entity); 
    } 

    public void DeleteTest(Test entity) 
    { 
     DeleteEntity(entity); 
    } 

, 내 DbContext 클래스에서이 테스트 객체를 정의했다 :

public DbSet<Test> Test { get; set; } 

물론 내 데이터베이스에 Test라는 테이블이 있습니다.이 스크립트는 create scr입니다.

  using (DataController dataSource = new DataController()) 
     { 
      Test test = new Test(); 
      test.Id = 1; 
      test.TestMember = "test2"; 
      dataSource.InsertTest(test); 
      dataSource.SaveChanges(); 
     } 

그때 쉽게 데이터베이스에서 삭제할 수 있습니다 :

  using (DataController dataSource = new DataController()) 
     { 
      Test test = new Test(); 
      test.Id = 1; 
      test.TestMember = "test2"; 
      dataSource.DeleteTest(test); 
      dataSource.SaveChanges(); 
     } 

하지만 경우를 내가 성공적으로 데이터베이스에 새로운 테스트 객체를 삽입 할 수 있습니다

CREATE TABLE [dbo].[Test](
    [ID] [int] IDENTITY(1,1) NOT NULL, 
    [TestMember] [nvarchar](50) COLLATE Icelandic_CI_AS NOT NULL, 
CONSTRAINT [PK_Test] PRIMARY KEY CLUSTERED 
(
    [ID] ASC 
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] 
) ON [PRIMARY] 

: 테이블에 대한 IPT 시도해보십시오.

  using (DataController dataSource = new DataController()) 
     { 
      Test test = new Test(); 
      test.Id = 1; 
      test.TestMember = "UpdatedTest"; 
      dataSource.UpdateTest(test); 
      dataSource.SaveChanges(); 
     } 

"객체 참조가 객체의 인스턴스로 설정되지 않았습니다." 이 줄의 예외는 여기에 있습니다 :

UpdateEntity (엔터티);

DataController의 UpdateTest 메서드 내에 있습니다.

더의 InnerException가 없습니다 및 스택 추적은 정확하게 도움이되지 않습니다 : System.Web.Mvc.Async.AsyncControllerActionInvoker에서

System.Web.Http.Data.EntityFramework.DbDataController 1.UpdateEntity(Object entity) at Hot.Web.Controllers.DataController.UpdateTest(Test entity) in c:\......\DataController.cs:line 48 at Hot.Web.Controllers.UserManagementController.EditProfile() in c:\.......\UserManagementController.cs:line 223 at lambda_method(Closure , ControllerBase , Object[]) at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary 2 개 매개 변수) 에서 . <> c_ DisplayClass42.b _41() at System.Web.Mvc.Async.AsyncResultWrapper System.Web.Mvc.Async.AsyncControllerActionInvoker에서 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod (IAsyncResult를 asyncResult) 에서 <> C_ DisplayClass8 1.<BeginSynchronous>b__7(IAsyncResult _) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult 1.End() . <> c _DisplayClass37. <> c_ DisplayClass39.b _33() at System.Web.Mvc.Async.AsyncControllerActionInvoker. <> c_ DisplayClass4f.b _49()

누구나 잘못된 것이있을 수 있습니다.

답변

0

당신은 엔티티를 조회 한 다음 dbcontroller을 사용하여 해당 검색 개체를 업데이트해야

using (DataController dataSource = new DataController()) { 
     Test test = dataSource.getById(1); //Use whatever query method you need to here 
     test.TestMember = "UpdatedTest"; 
     dataSource.UpdateTest(test); 
     dataSource.SaveChanges(); 
    } 
관련 문제