Entity Frameworkコアで[ComplexType]を使用する

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

質問

私は自分のクラスのプロパティをEFコアデータモデルの中で使用しています。

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がエラーを報告するということです。

Microsoft.Data.Entity.Metadata.ModelItemNotFoundException: The entity type 'RentABike.Models.Money' requires a key to be defined.

キーを宣言すると、「Money」の別のテーブルが作成されますが、これは私が探しているものではありません。

EFコアでComplexTypeを使用し、すべてを単一のテーブルに入れる方法はありますか?

受け入れられた回答

複雑なタイプのサポートは現在、バックログhttps://github.com/aspnet/EntityFramework/issues/246にあります


人気のある回答

上記のコメントに基づいたアップデートとして、DbContextのOnModelCreating関数でFluent APIを使用してOwnsOne構文を使用するようになり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を使用するかどうかはComplexTypeAttributeません。しかし、私はAdd-Migrationによるマイグレーションを生成したとき、これは古いComplexTypeドキュメンテーションのために期待通りに生成されました(つまり、 Rateという名前のテーブルにPrice_Amountカラムがあります)。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ