У меня есть поставщик контентов Breeze, говорящий с EF 6.1.1, приложение с базами данных с SQL Server, с которыми у меня возникают проблемы. Я могу ВСТАВИТЬ новую запись, но когда я ее обновляю, не все измененные столбцы записываются в базу данных.Breeze-> EF6, обновляющий некоторые измененные столбцы, но не все
У меня есть сгенерированный ПОКО, который выглядит следующим образом:
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; }
}
Когда я иду и обновить объект на стороне клиента (установка Комментарий недвижимости) и отправить его в Бриз, я несколько очень простых множеств в 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
Конечно, UpdateBy является NULL в базе данных для этого обновления.
Я не могу понять, почему этот конкретный столбец не пройдет, когда столбец «соседний», установленный в одно и то же время, делает это. Я также не знаю, является ли это проблемой Breeze или проблемой EF, так как я могу вернуться и просто использовать EF, DBContext работает нормально.
Я также попытался удалить таблицу из файла EDMX и повторно добавить ее безрезультатно. Я повторно проверил, что столбец находится в таблице в файле EDMX.
Как взломать, мне нужно вернуться, перечитать измененную запись напрямую, обновить ее, а затем отправить обратно.
Любые советы будут оценены.
Можете ли вы просто обновить столбец «UpdateBy» (комментировать другой столбец) и сообщить нам, что такое текущее состояние вашей сущности и что происходит, когда вы пытаетесь его сохранить? "var state = ctx.Entry (source) .State;" –