1

最初にコードを使用して、いくつかの抽象クラスとそれらの抽象クラスから派生したいくつかのクラスがあります。

// Abstracted Classes
public abstract class Brand
{
  [Key]
  public int Id { get; set; }
  public string Name { get; set; }
}

public abstract class Model
{
  [Key]
  public int Id { get; set; }
  public string Name { get; set; }

}

// Derived Classes
[Table("ComparisonBrand")]
public class ComparisonBrand : Brand
{
  public ComparisonBrand()
  {
    ComparisonValues = new List<ComparisonValue>();
    Models = new List<ComparisonModel>();
  }

  public virtual ICollection<ComparisonValue> ComparisonValues { get; set; }
  public virtual ICollection<ComparisonModel> Models { get; set; }
}

[Table("ComparisonModel")]
public class ComparisonModel : Model
{
  public int? BrandId { get; set; }
  public int? LogoId { get; set; }

  [ForeignKey("BrandId")]
  public virtual ComparisonBrand ComparisonBrand { get; set; }
  [ForeignKey("LogoId")]
  public virtual ComparisonLogo ComparisonBrand { get; set; }

  public virtual ICollection<ComparisonValue> ComparisonValues { get; set; }
}

私の問題は、移行によって次の外部キーが生成されることです。

  • ComparisonModel.Id> Models.Id
  • ComparisonModel.BrandId> Brands.Id
  • ComparisonModel.BrandId> ComparisonBrand.Id

ComparisonBrand.IdはBrands.BrandIdのFKであるため、ブランドレコードを削除するとエラーが発生します。ただし、ComparisonModel.BrandId> ComparisonBrand.Idの関係を削除すると、削除は正常に機能します。

抽象化されたテーブルと派生したテーブル(ブランドとComparisonBrand)の両方の間に関係が形成されないようにするにはどうすればよいですか?

4

1 に答える 1

0

virtual キーワードを使用しているため、Lazy Loadingが発生します。この機能を使用して、それらの外部キーを生成するように EF に指示しています。仮想をドロップすると、キーは作成されなくなります

于 2013-03-04T17:06:42.047 に答える