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_ DisplayClass81.<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()
누구나 잘못된 것이있을 수 있습니다.