我面臨的一個問題是,當我設置一個字段的值不爲空時,EF將更新數據庫。EF附加不會更新數據庫字段爲空
但是,當我清除字段(輸入[文本]爲空)時,數據庫中的匹配字段不會更新爲NULL。
這裏是代碼:
C#由EF
exec sp_executesql N'update [dbo].[Plantas]
set [CodEstado] = @0, [NomePlanta] = @1, [CEP] = @3
where ([CodPlanta] = @4)
',N'@0 int,@1 varchar(200),@3 char(8),@4 int',
@0=26,
@1='Apiaí',
@2='Integrada',
@3='18320000',
@4=373
go
看到,當vm.Telefone
和vm.Fax
,這些字段將不會在UPDATE查詢顯示生成
var entidade = new Plantas { CodPlanta = vm.CodPlanta };
db.Plantas.Attach(entidade);
entidade.CodEstado = vm.CodEstado;
entidade.NomePlanta = vm.NomePlanta;
entidade.CEP = vm.CEP;
entidade.Telefone = vm.Telefone;
entidade.Fax = vm.Fax;
db.SaveChanges();
SQL。但是如果有一些價值,他們會。
即使字段之前有一些值。
如果在db.Savechanges()
處放置斷點,它將顯示entidade.Telefone = null
。但它不會去生成的查詢。
如何強制實體框架將字段設置爲空?
字段不爲空更新之前,他們的價值和我設置爲null。所以我正在改變價值。 –
該字段在數據庫中不爲空,但在附加的內存中的對象爲空。內存中的對象不會更改,因此EF認爲沒有理由將更改傳播到數據庫。 EF無法知道列中包含的數據庫中的空值以外的內容,因爲您沒有告知它。你可以通過閱讀而不是附加,但效率不高。或者你可以僞造它,如我的答案中所示。你試過了嗎? –
ahhh好!我試過了,它工作。我認爲「字段null之前」是db字段。但我還有一個問題......有一個簡單的方法嗎?也許是一些強制所有字段被修改狀態的屬性?因爲有幾個字段,我發佈的代碼只是一個示例.. –