我正在試驗VS 2011 Beta和EF,我遇到了UpdateEntity問題,但是InsertEntity和DeleteEntity正常工作。DbDataConttoller UpdateEntity引發異常
問題是,當我調用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的表,這是創建scr IPT爲表:
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();
}
我得到「對象引用未設置爲對象的實例」。這裏的例外:
UpdateEntity(entity);
裏面的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() at 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() at System.Web.Mvc.Async.AsyncControllerActionInvoker。 <> c_ DisplayClass4f。b _49()
任何人都有任何線索可能是錯誤的?