.net core 在EF Core中配置拥有的属性

.net core 在EF Core中配置拥有的属性,.net-core,ef-core-2.0,.net Core,Ef Core 2.0,编辑:原始问题陈述仅包含一个对所属实体的引用。但事实证明,我遇到的问题发生在对所属实体的多个引用和一些时髦流畅的配置代码上。我重写了这个问题陈述来解释我遇到的问题的细节 我从一个EF核心实体开始,它引用了一个自有实体: public class InvoiceItem { public SubscriptionPlanDetails SubscriptionPlan { get; set; } } [Owned] public class SubscriptionPlanDetails

编辑:原始问题陈述仅包含一个对所属实体的引用。但事实证明,我遇到的问题发生在对所属实体的多个引用和一些时髦流畅的配置代码上。我重写了这个问题陈述来解释我遇到的问题的细节

我从一个EF核心实体开始,它引用了一个自有实体:

public class InvoiceItem
{
    public SubscriptionPlanDetails SubscriptionPlan { get; set; }
}

[Owned]
public class SubscriptionPlanDetails
{
    public string PlanName { get; set; }                // Plan name
    public decimal Price { get; set; }                  // Price (USD)
}
public class Account
{
    public int Id { get; set; }

    public SubscriptionPlanDetails SubscriptionPlan { get; set; }

    // Navigation properties
    public virtual ICollection<InvoiceItem> InvoiceItems { get; set; }
}
当我在VS Package Manager控制台中输入命令“添加迁移”时,架子工抱怨:

未为实体类型“SubscriptionPlanDetails”上的十进制列“Price”指定类型

因此,我添加了一些fluent API配置:

protected override void OnModelCreating(ModelBuilder builder)
{
    base.OnModelCreating(builder);

    builder.Entity<SubscriptionPlanDetails>()
        .Property(p => p.Price)
        .HasColumnType("money");
}
尝试添加迁移会导致出现
NullReferenceException


如果我注释掉了对
builder.Entity()
的有问题的调用,那么它将按预期工作

我认为覆盖此十进制警告的最佳方法是用以下内容注释价格:

[Column(TypeName = "decimal(18,2)")]
public decimal Price { get; set; }

您也可以使用类型“money”而不是“decimal(18,2)”

第二个的可能重复应该可以。你从哪里得到NRE?当我在VSThar中添加迁移时,我得到了NRE,这很奇怪,因为我已经尝试了你的代码,它对我有效(EF Core 2.1,SqlServer)啊哈!我明白了。发生NRE是因为一些遗留的配置代码(请参阅完全重写的问题陈述)。我在正确的轨道上。。。我被一个无关的问题绊倒了。
[Column(TypeName = "decimal(18,2)")]
public decimal Price { get; set; }