Я не могу обновить свою базу данных из отключенных объектов Poco.В этом примере я выбираю объект ApplicationUser, обновляю поле SSOID поля varchar (100), но изменения не вступают в силу.Даже когда я повторно получаю объект в методе сохранения, в базу данных ничего не отправляется.
Если я пытаюсь вызвать ApplyCurrentValues, он выдает
Объект с ключом, который соответствуетключ предоставленного объекта не найден в ObjectStateManager.Убедитесь, что значения ключа предоставленного объекта соответствуют значениям ключа объекта, к которому должны быть применены изменения.
public void Save(ApplicationUser au)
{
ApplicationUser original = context.ApplicationUsers.FirstorDefault(a => a.UserID == au.UserID);
context.ContextOptions.ProxyCreationEnabled = false; //changing this has no effect
if(original == null)
{
context.AddObject("ApplicationUsers",au); //this works!
}
else
{
///let's manually set some properties on the object I just fetched.
original.SSOID = au.SSOID;
ObjectStateEntry entry = null;
context.DetectChanges();
context.ObjectStateManager.TryGetObjectStateEntry(original.EntityKey, out entry);
//entry is still null!
context.ApplicationUsers.ApplyCurrentValues(original); //BOOM!!
}
context.SaveChanges();
return;
}
Я перепробовал все, что мог придумать, даже заставив ApplicationUser
реализовать System.Data.Objects.DataClasses.IEntityWithKey
, который предположительно не нужен.
Вот отображение:
<EntitySetMapping Name="ApplicationUsers">
<EntityTypeMapping TypeName="MyCompanyName.ApplicationUser">
<MappingFragment StoreEntitySet="ApplicationUser">
<ScalarProperty Name="UserID" ColumnName="UserID" />
<ScalarProperty Name="SystemID" ColumnName="SystemID" />
<ScalarProperty Name="Username" ColumnName="Username" />
<!--snip-->
<ScalarProperty Name="CreatedOn" ColumnName="CreatedOn" />
<ScalarProperty Name="CreatedBy" ColumnName="CreatedBy" />
<ScalarProperty Name="SSOID" ColumnName="SSOID" />
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>