我正在尝试使用 VS 2011 Beta 和 EF,但在使用 UpdateEntity 时遇到问题,但 InsertEntity 和 DeleteEntity 工作正常。
问题是,当我调用 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 类中定义了这个 Test 对象:
public DbSet<Test> Test { get; set; }
当然,我的数据库中有一个名为 Test 的表,这是该表的创建脚本:
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]
我可以成功地将新的测试对象插入数据库:
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();
}
但如果我尝试这样做:
using (DataController dataSource = new DataController())
{
Test test = new Test();
test.Id = 1;
test.TestMember = "UpdatedTest";
dataSource.UpdateTest(test);
dataSource.SaveChanges();
}
我得到一个“对象引用未设置为对象的实例”。此处这一行的异常:
更新实体(实体);
在 DataController 的 UpdateTest 方法中。
没有 InnerException 并且堆栈跟踪并不完全有帮助:
在 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 个参数)在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<> c_DisplayClass42.b _41() 在 System.Web.Mvc.Async.AsyncResultWrapper.<> c_DisplayClass81.<BeginSynchronous>b__7(IAsyncResult _) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult
1.End() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c _DisplayClass37.<> c_DisplayClass39.b _33() 在 System.Web .Mvc.Async.AsyncControllerActionInvoker.<>c_ DisplayClass4f.b _49()
有人知道可能出了什么问题吗?