1

私は製品クラスを持っています:

public class Product
{
    public int ID { get; set; }

    [Required]
    public string Name { get; set; }
    public decimal Price { get; set; }

    public Offer Offer { get; set; }
}

そしてオファークラス:

public class Offer
{
    public int ID { get; set; }

    [Required]
    public DateTime DateFrom { get; set; }
    public DateTime DateTo { get; set; }
    public decimal OfferPrice { get; set; }
    public Product Product { get; set; }
}

基本的に達成したいのは、オファーが追加されたときに製品がこのオファーに関連することです。したがって、オファーには常に製品がありますが、製品に常にオファーが必要なわけではありません。製品にオファーがある場合は、 からアクセスできるようにしたいのですProduct.Offerが、このセットアップでは、データベースの更新時に次のエラー メッセージが表示されます。

タイプ 'WebshopISEC.Models.Offer' と 'WebshopISEC.Models.Product' の間の関連付けのプリンシパル エンドを特定できません。この関連付けのプリンシパル エンドは、リレーションシップ fluent API またはデータ アノテーションを使用して明示的に構成する必要があります。

私は多くのこと (データ注釈と Fluent API) を試し、際限なく検索しましたが、この問題を解決できないようです。私が試したFluent APIアプローチ:

modelBuilder.Entity<Offer>()
            .HasRequired(x => x.Product)
            .WithOptional(x => x.Offer);

しかし、これは役に立ちませんでした。プリンシパル エンドを割り当てるにはどうすればよいですか? そして、どのクラスに?

4

3 に答える 3