我有一個Breeze上下文提供程序與EF 6.1.1,數據庫優先的應用程序與SQL Server交流,我遇到了一些問題。我可以插入新記錄,但是當我更新它時,並不是所有更改的列都寫入數據庫。Breeze-> EF6更新一些更改的列,但不是全部
我有一個生成的POCO,看起來像這樣:
public partial class Inventory
{
public Inventory()
{
}
public int Id { get; set; }
public System.DateTime EnteredAt { get; set; }
public string EnteredBy { get; set; }
public string UpdatedBy { get; set; }
public Nullable<System.DateTime> UpdatedAt { get; set; }
public string Comment { get; set; }
}
當我去和更新客戶端(設置Comment屬性)的實體,然後郵寄到微風,我做的一些非常簡單的套EFContextProvider :: BeforeSaveEntity覆蓋:
protected override Dictionary<Type, List<EntityInfo>> BeforeSaveEntities(Dictionary<Type, List<EntityInfo>> saveMap)
{
// only one inventory is ever sent in
if (saveMap.ContainsKey(typeof(Inventory)))
{
var source = saveMap[typeof(Inventory)].First().Entity as Inventory;
// set up the user and time fields
if (source.Id <= 0)
{
source.EnteredBy = _defaultUserName;
source.EnteredAt = DateTime.Now;
}
else
{
source.UpdatedBy = _defaultUserName;
source.UpdatedAt = DateTime.Now;
}
}
}
但是,當改變被提交時,改變UpdatedBy值永遠不會到數據庫。
我打開EF6 SQL日誌記錄,果然,UPDATE語句完全錯過了屬性。
UPDATE [dbo].[Inventory]
SET [Comment] = @0, [UpdatedAt] = @1
WHERE ([Id] = @2)
-- @0: '1532' (Type = AnsiString, Size = 250)
-- @1: '2/4/2016 10:32:58 PM' (Type = DateTime2)
-- @2: '100344' (Type = Int32)
-- Executing at 2/4/2016 3:33:06 PM -07:00
-- Completed in 7 ms with result: 1
當然,此更新的數據庫中的UpdatedBy爲NULL。
我不明白爲什麼這個特定的列不會做什麼,當一個'相鄰'列,同時設置,做。我也不知道這是Breeze問題還是EF問題,因爲我可以回去使用EF,DBContext都可以正常工作。
我也嘗試從EDMX文件中刪除表並重新添加它無濟於事。我重新驗證了該列在EDMX文件的表格中。
作爲一個黑客,我要做的就是回去重新讀取已更改的記錄,然後將其更新並重新發送。
任何意見,將不勝感激。
您可以只更新「UpdateBy」列(註釋其他列)並告訴我們您的實體的當前狀態以及當您嘗試保存時發生了什麼? 「var state = ctx.Entry(source).State;」 –