私はEF4.1をコードファースト、TPT(タイプごとのテーブル)継承を使用しています。コードの最初のTPTと削除時のカスケード
public class Customer
{
public virtual ICollection<Product> Products {get; set;}
}
public class Product
{
[Required]
public int Id { get; set; }
[Required]
public virtual Customer {get; set;}
public decimal Price { get; set; }
}
public class SpecializedProduct : Product
{
public string SpecialAttribute { get; set; }
}
私は顧客を削除すると、その顧客に関連するすべての製品を削除したいと考えています。私は、顧客と製品の間(真)WillCascadeOnDeleteを指定することができます。
modelBuilder.Entity<Customer>().HasMany(e => e.Products).WithRequired(p => p.Customer).WillCascadeOnDelete(true);
が、SpecializedProductと製品の間foreighnキーの関係がありますので、私は顧客を削除しようとするとき、私は例外を取得:
DELETE文がREFERENCE制約 "SpecializedProduct _TypeConstraint_From_Product_To_SpecializedProduct"と競合しました。競合は、データベース "Test"、テーブル "dbo.SpecializedProduct"、列 'Id'で発生しました。ステートメントは終了されました。
私は手動でそれが動作SpecializedProduct _TypeConstraint_From_Product_To_SpecializedProduct制約に削除カスケードに設定された、しかし、私は、ModelBuilderのか、コード内の他のいくつかの方法を使用してこれを指定できるようにしたい場合。これは可能ですか?
ありがとうございます!
よろしくは、それがデータベースになると
サイモン
それは13ヶ月かかりましたが、私は私の答えを得ました:-)ありがとう!私が覚えているように、いくつかのSQLを実行してモデル作成時に手動でカスケード削除を定義することになりました。 –