2012-01-09 14 views
0

私はUserと呼ばれるエンティティを持っています。ユーザは、ユーザが、私はこれにより、ユーザEF 4.2のカスケード削除の問題

modelBuilder.Entity<User>() 
     .HasMany(q => q.Name) 
     .WithOptional() 
     .WillCascadeOnDelete(); 

    modelBuilder.Entity<User>() 
     .HasMany(q => q.Info) 
     .WithOptional() 
     .WillCascadeOnDelete(); 

ためのルールはEFが Esceptionメッセージは、「FOREIGN KEY制約を紹介されたモデルを作成することができませんでしたルール持っまた

class User{ 
virtual ICollection<TextEntry> Name {get; set;} 
virtual ICollection<TextEntry> Info {get; set;} 
... 
} 

class TextEntry 
{ 
int id {get; set;} 
string Text {get; set;} 
string Culture {get;set;} 
} 

のように見えます 多言語環境で使用する必要があります'TextEntry'テーブルの 'User_Info'は、サイクルまたは複数のカスケードパスを引き起こす可能性があります。

このルールがないと、参照制約のためにユーザーを削除しようとすると例外が発生します。

User.Infoデータの追加エンティティを作成することでこれを解決する方法はありますか?

答えて

1

このエラーは、Entity FrameworkではなくSQL Serverからのものです。 Entity Frameworkは、TextEntryの両方の発生に対して1つのテーブルを作成しています。

おそらく最も簡単な解決策は、TextEntryを他の2つのクラスから派生させ、TextEntryを抽象化し、これらの2つを別個のテーブル(TPC)にマッピングすることです。

+0

しかし、多言語にする必要があるフィールドが3つ以上ある場合はどうなりますか?新しい分野のために新しいインスタンスを作成することは素晴らしい考えではないと思います。それはすべて同じ機能を持ちますが、名前は異なるためです。 – Ph0en1x

+0

@ Ph0en1xはいはい。しかし、いくつかのカスタムパーツ(ビュー(1つのテーブルを模倣するのに役立つかもしれない)、トリガー(実際にカスケードに役立つかもしれない)など)を使用してEntity Frameworkの外部にデータベースを作成することなく、 –

+0

私は、この問題がEFルールでいくつかのトリックで解決できることを本当に願っています。 – Ph0en1x

関連する問題