我在UWP Project中使用SQLite数据库EFCore 2.0预览。 地址表被拆分为不同的实体
送货地址, 发票地址 使用
modelBuilder.Entity<Project>().OwnsOne(p => p.DeliveryAddress);
适用于设置数据库,通过迁移,可以在数据库中创建不同的表。我手动输入的测试数据非常适合从这些表中读取数据。但是如何保存对DeliveryAddress表的更改。当我保存使用时,没有任何东西被持久化到数据库:
public void UpdateDeliveryAddress(Project modifiedProject)
{
using (var db = new SteelFrameCalculatorDataContext())
{
db.Entry(modifiedProject).State = EntityState.Modified;
db.SaveChanges();
}
}
项目是父实体
2017-06-11T23:21:10.9242463 + 01:00警告8 Microsoft.EntityFrameworkCore.Model.Validation 实体类型'Project.DeliveryAddress-&gt; Address'上的键{'ProjectId'}包含阴影状态的属性 - {'ProjectId'}。要配置此警告,请使用DbContextOptionsBuilder.ConfigureWarnings API(事件ID“CoreEventId.ModelValidationShadowKeyWarning”)。重写DbContext.OnConfiguring方法或在应用程序服务提供程序上使用AddDbContext时,可以使用ConfigureWarnings。
使用以下命令保存对数据库的更新。假设UpdateRange(实体)将所有设置为已修改。不确定这是否正确,但是有效。
using (var db = new SteelFrameCalculatorDataContext())
{
db.UpdateRange(modifiedProject);
db.SaveChanges();
}
答案 0 :(得分:0)
您是否尝试过设置子对象的状态?您似乎只设置了父Project
州。
添加它应该这样做:
db.Entry(modifiedProject.DeliveryAddress).State = EntityState.Modified;
答案 1 :(得分:0)
db.Entry(modifiedProject).Reference(a=>a.DeliveryAddress).TargetEntry.State = EntityState.Modified;