Код, впервые приводящий к тому, что обязательное отношение становится необязательным?

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; }
}

Fluent 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);

Итак, вот некоторые классы, которые я определил. Они имеют следующие отношения: Client & Product имеют отношения один ко многим, Client & Inquiry имеют отношения один ко многим и Product & Inquiry имеют отношения один ко многим. Здесь я использую Code First. Теперь, используя fluent api, я определил отношения, эти отношения должны быть обязательными, то есть отношения Client & Product не могут быть нулевыми, также как и Client and Inquiry не могут быть нулевыми.

Однако отношения Client & Inquiry принудительно становятся необязательными с помощью Code First. Когда я пытаюсь сделать их обязательными, EF не генерирует базу данных.

Может ли кто-нибудь сказать мне, что не так в моей модели, что заставляет EF не создавать обязательные отношения между Client & Inruiry? Это происходит из-за каскадного удаления? Как я читал, в mssql может быть только один путь каскадного удаления между клиентом, продуктом и запросом. Любая помощь в объяснении была бы приятна.

7
задан Pavel Gatilov 8 January 2012 в 08:57
поделиться