[英]Entity Framework only saves some fields
我有一個使用實體框架提取數據的GridView。 RowUpdating事件給我一個奇怪的問題。 提取所需數據,插入和刪除都可以,只是更新。
在方法中,我從GridView中獲得給定datakey的項目:
int dataKey = Convert.ToInt32(gridView.DataKeys[e.RowIndex].Value);
MyEntity ent = context.MyEntities.First(x => x.Key == dataKey;
然后,我更新必要的字段並保存:
ent.Field1 = "some data";
ent.Field2 = "other data";
ent.ModifiedDate = DateTime.Now;
context.SaveChanges();
在調試時,在context.SaveChanges()之后,我看到Field1和Field2保存了它們的新值,而ModifiedDate變回了以前的值。
我唯一認為會導致這種情況的是,當我查看.edmx文件中的表時,ModifiedDate字段在StoreGeneratedPattern中具有“ Computed”。 但是,這應該只是在最初進行計算。 例如,用戶插入沒有ModifiedDate的項目,SQL Server在創建時將getdate()放入字段中。
USE [MyDB]
GO
ALTER TABLE [dbo].[MyEntities] ADD CONSTRAINT
DF_MyEntities_ModifiedDate] DEFAULT (getdate()) FOR [ModifiedDate]
GO
問題確實出在正在計算的StoreGeneratedPattern中。 如果將其設置為“計算的”,它將覆蓋用戶將值設置為的任何值,並嘗試在數據庫中查找將為其提供計算值的約束。 問題在於默認約束僅在未提供任何內容的情況下才會觸發,但是為UPDATE命令生成的查詢EF發送類似ModifiedDate = NULL的信息。 因此,EF表示我將發送ModifiedDate = NULL,但是一旦數據庫運行此更新查詢,它將被覆蓋。 然后,數據庫說好,如果用戶不提供,我將為ModifiedDate提供一個計算值。 哦,等等,我看到他們提供了ModifiedDate,我不需要運行約束。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.