簡體   English   中英

實體框架僅保存一些字段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM