在Entity Framework Core中使用[ComplexType]

asp.net-core-mvc entity-framework-core

我在EF Core數據模型中使用了我自己的類的屬性。

public class Currency
{
    public string Code { get; set; }
    public string Symbol { get; set; }
    public string Format { get; set; }
}

[ComplexType]
public class Money
{
    public int? CurrencyID { get; set; }
    public virtual Currency Currency { get; set; }
    public double? Amount { get; set; }
}

public class Rate
{
    public int ID { get; set; }
    public Money Price = new Money();
}

我的問題是,當我嘗試創建遷移時,EF Core報告錯誤。

public class Currency
{
    public string Code { get; set; }
    public string Symbol { get; set; }
    public string Format { get; set; }
}

[ComplexType]
public class Money
{
    public int? CurrencyID { get; set; }
    public virtual Currency Currency { get; set; }
    public double? Amount { get; set; }
}

public class Rate
{
    public int ID { get; set; }
    public Money Price = new Money();
}

如果我聲明了一個鍵,就會創建一個單獨的“Money”表,這不是我想要的。

有沒有辦法在EF Core中使用ComplexType並將它們全部放入一個表中?

一般承認的答案

目前正在積壓支持複雜類型https://github.com/aspnet/EntityFramework/issues/246


熱門答案

作為基於上述評論之一的更新,您現在可以使用DbContext的OnModelCreating函數中的Fluent API來使用OwnsOne語法。

[ComplexType]
public class Money
{
    public double? Amount { get; set; }
}

public class Rate
{
    [Key]
    public long Id { get; set; }

    public Money Price { get; set; }
}

public MyDbContext : DbContext
{
     protected override void OnModelCreating(ModelBuilder modelBuilder)
     {
         modelBuilder.Entity<Rate>(entity =>
         {
             entity.OwnsOne(e => e.Currency);
         });
     }
}

我真的不確定它是否使用了ComplexTypeAttribute 。但是當我通過Add-Migration生成我的遷移時,它以這種方式生成了舊的ComplexType文檔的預期(即名為Rate表具有列Price_Amount )。




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因