私は製品クラスを持っています:
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);
しかし、これは役に立ちませんでした。プリンシパル エンドを割り当てるにはどうすればよいですか? そして、どのクラスに?