我有一个父子关系,其中父级有一个 ValueObject,但我无法确定如何正确定义该关系。
为子/父关系添加迁移失败并出现错误...
实体类型“地址”需要定义主键。
以下是当前的代码结构。
public class Address
{
[Required]
public string BuildingNumber { get; private set; }
// other address properties...
}
public class Parent
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; protected set; }
[Required]
public Address PrimaryAddress { get; private set; }
}
public class ParentContext : DbContext
{
public ParentContext(DbContextOptions<ParentContext> options) :
base(options)
{
}
public DbSet<Parent> Parents { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Parent>().OwnsOne(p => p.PrimaryAddress);
// Flatten the ValueObject fields into table
modelBuilder.Entity<Parent>().OwnsOne(p => p.PrimaryAddress).
Property(b => b.BuildingNumber).IsRequired().
HasColumnName("Primary_BuildingName");
}
}
public class Child
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; protected set; }
[Required]
public int ParentId { get; private set; }
[ForeignKey("ParentId")]
public Parent Parent { get; private set; }
}
public class ChildContext : DbContext
{
public ChildContext(DbContextOptions<ChildContext> options) : base(options)
{
}
public DbSet<Child> Children { get; set; }
}
使用上面的代码示例,我可以运行单独的命令来为父级和子级创建迁移,并且表看起来正确。
添加迁移创建父-c 父上下文
添加迁移创建子-c子上下文
添加与实体的关系并添加最终迁移失败。
添加迁移添加父子fk -c子上下文
仅当我的子级和父级处于不同的上下文中时,才会出现此问题。
我尝试在父级和子级中以不同的方式定义关系来映射地址字段,以便子级“理解”映射,但我无法避免我尝试过的任何方法出现 EF 错误。
示例项目在这里
https://github.com/cimatt55/ef-parent-valueobject
饮歌长啸
相关分类