1

我正在尝试使用 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, IDictionary2 个参数)在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<> c_DisplayClass42.b _41() 在 System.Web.Mvc.Async.AsyncResultWrapper.<> c_DisplayClass8 1.<BeginSynchronous>b__7(IAsyncResult _) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult1.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()

有人知道可能出了什么问题吗?

4

1 回答 1

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();
    }
于 2012-10-11T22:49:07.820 回答