2012-01-13 14 views
1

私はクラスを持っています質問EFコードファースト外来キー

CompareItemsストアCurrentQuestion-to-OtherQuestion比較情報

public class Question 
{ 
    public virtual ICollection<QuestionMark> CompareItems { get; set; } 
} 


public class QuestionMark 
{ 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 
    public int Question { get; set; } //Store ID of OtherQuestion 
    public decimal Mark { get; set; } 
} 

私は私が必要とするいくつかの質問Aを削除

、それが問題が存在しない場合は情報を比較持ちする必要がありますないのでQuestionMark.Question == A.Idも、削除されたすべてのQuestionMark。 QuestionMark.Questionをエンティティにすることなく、それをどうやって行うことができますか?たぶん、EFは、Fluent-APIでそのQuestionMarkを設定するいくつかのルールを持っているかもしれません.QuestionはQuestionエンティティの外部キーですか?

私は現在のソリューションのロットを変更する必要があるため、QuestionMark.Questionをエンティティとして作成するつもりはありません - 最初です。また、質問は、あなたが必要とするかなり重いエンティティであり、そしてあなたがQuestionMarkクラスにナビゲーションプロパティQuestionをしたくない場合は、複数の値を割り当てるまたは削除するには、時間または何か他のものは、パフォーマンス上のプレス

答えて

1

EFはデフォルトで遅延読み込みを使用するため、パフォーマンスの問題を引き起こさないため、IDの代わりにエンティティを使用するようにアプリを変更することは可能です。そして、私はいくつかの流暢なAPIの設定や属性でエンティティの代わりにIDだけを使用すると思います。

0

なり、それをロードするために手動で「カスケード削除」を使用して外部キーを作成します。すべての質問が削除されると、データベースでという関連するQuestionMarkレコードが削除されます。

ただし、この方法ではEFに問題があります。 EFはこれらのエンティティ間に「カスケード削除」関係があることを知らないためです。したがって、EF内のローカルに追跡されるエンティティ内に矛盾が生じる可能性があります。

EFで関係をマップしたくない理由はありませんでしたが、私はそれに対して非常に助言します。

+1

理由を「Q​​uestionMarkオブジェクトから質問番号にアクセスしたいので」理由がある場合は、外部キープロパティとナビゲーションプロパティの両方を公開できます。 – hvd

関連する問題