public class Client
{
public Int32 ClientID { get; set; }
public virtual ICollection<Inquiry> InquiryManufacturers { get; set; }
public virtual ICollection<Product> Products { get; set; }
public virtual ICollection<Inquiry> InquiryRetailers { get; set; }
}
public class Product
{
public Int32 ProductID { get; set; }
public Int32 ClientID { get; set; }
public virtual Client Client { get; set; }
public virtual ICollection<Inquiry> Inquiries { get; set; }
}
public class Inquiry
{
public Int32 InquiryID { get; set; }
public Int32 ProductID { get; set; }
public Int32 ManufacturerID { get; set; }
public Int32 RetailerID { get; set; }
public virtual Product Product { get; set; }
public virtual Client Manufacturer { get; set; }
public virtual Client Retailer { get; set; }
}
流暢APIは、だからここ最初に必須リレーションシップをオプションにしますか?
HasRequired(i => i.Product)
.WithMany(p => p.Inquiries);
HasRequired(i => i.Manufacturer)
.WithMany(p => p.InquiryManufacturers)
.HasForeignKey(p => p.ManufacturerID);
HasRequired(i => i.Retailer)
.WithMany(p => p.InquiryRetailers)
.HasForeignKey(p => p.RetailerID);
ようである私が定義されているいくつかのクラスがあります。彼らは以下のような関係を持っています:クライアント&製品は1対多にあり、クライアント&お問い合わせは1対多数あり、製品&お問い合わせは1対多数あります。私はここでコードファーストを使用しています。現在、流暢なAPIを使用して、関係を定義しています。これらの関係は必要なものとみなされます。クライアント& Product Relationshipをnullにすることはできません.ClientとInquiryもnullにすることはできません。
クライアントとの関係&お問い合わせは、コードファーストの付いたオプションのものでなければなりません。私がそれらを必要とするようにしようとすると、EFはデータベースを生成しません。
私のモデルで何が間違っていると教えてくれるのですか?EFがクライアントとの間に必要なリレーションシップを作成していない原因となっています& Inruiry?これはカスケード削除によるものですか?私はmssqlがClient、Product、Inquiryの間に1つのカスケード削除パスしか持つことができない場所をいくつか読んでいます。どんな助けの説明もいいでしょう。
エラーが表示されますか? 「それは強制的にオプションのものになる」という意味はどうですか? – CDeutsch
データベースが生成されないだけのエラーはありませんが、RetailerIDとManufacturerID nullをに、Fluent ApiをHasOptionalにすると、データベースが生成されます。 –
user781310
完全なマッピング設定を投稿してください。3つのエンティティに関連するすべてが議論されています。あなたの状況を再現するのに十分な情報を提供する。また、どのdbエンジンをターゲットにしていますか? –