EF Core 2.0 OwnsOne列前缀

时间:2018-01-10 12:18:37

标签: ef-core-2.0

使用OwnsOne映射复杂类型时,sql列名称以属性名称为前缀。是否可以在映射中指定前缀名称?

这是我的映射:

e.OwnsOne(x => x.Attributes, cb =>
{
    cb.OwnsOne(a => a.Supplier);
});

我希望sql列以“Attr_”为前缀,而不是“Attributes_”。这可能吗?

2 个答案:

答案 0 :(得分:2)

您可以编写扩展方法来覆盖所有列的名称;

   public static WithPrefix<T, R>(this OwnedNavigationBuilder<T, R> builder, string prefix) where T:class where R:class
   {
      foreach (var p in builder.OwnedEntityType.GetProperties())
         p.SetColumnName($"{prefix}{p.Name}");
   }

   .OwnsOne(e => e.Address, cb => cb.WithPrefix(""));

答案 1 :(得分:0)

伊凡·斯托耶夫(Ivan Stoev)在问题评论中的回答:

  

必须通过相应的OwnsOne构建器操作参数来完成。例如.OwnsOne(e => e.Address, cb => { cb.Property(e => e.Postcode).HasColumnName("Postcode"); });

(将其设为社区Wiki,只是将问题标记为已回答。)