如何使用EF核心拥有的entites

时间:2017-06-11 22:36:45

标签: entity-framework

我在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();
            }

2 个答案:

答案 0 :(得分:0)

您是否尝试过设置子对象的状态?您似乎只设置了父Project州。

添加它应该这样做:

db.Entry(modifiedProject.DeliveryAddress).State = EntityState.Modified;

答案 1 :(得分:0)

db.Entry(modifiedProject).Reference(a=>a.DeliveryAddress).TargetEntry.State = EntityState.Modified;