2011-09-09 9 views
1

私は他の人がこれについて投稿していることを知っていますが、私の質問と一致する答えを見つけることができません。私は.netにはスーパーですが、何かを理解していないかもしれません。.net mvcエンティティの循環参照の問題

私のサイトには、特定のユーザーが所有するプロジェクトオブジェクトがあります。プロジェクトには、他のユーザーが追加できる追加情報の別のモデルがあります。

私のモデルは似ています:

プロジェクト

  • プロジェクトの所有者FK
  • その他のもの

情報

  • プロジェクトFK
  • 情報所有者FK
  • その他のもの

しかし、私は許可されていない、循環参照になりますエラーに参照関係を取得しています。

私はプロジェクトと情報の両方でユーザーにfkを持っているとうんざりしていると思います。しかし、ユーザーは異なるので、私は1つを取り除くことはできません。それを伝える方法はありますか?

もう一度、私は.netの新品です。だから、これは愚かな質問ではないと思います。私はジャンゴの背景から来て、それが説明に役立つなら。

コード:

public class Information 
{ 

    [HiddenInput(DisplayValue = false)] 
    public int InfoID { get; set; } 

    //user 
    public virtual User User { get; set; } 
    [Required(ErrorMessage = "This field is required.")] 
    public int UserID { get; set; } 

    //project 
    public virtual Project Project { get; set; } 
    [Required(ErrorMessage = "This field is required.")] 
    public int ProjectID { get; set; } 

} 

public class Project 
{ 
    [HiddenInput(DisplayValue = false)] 
    public int ProjectID { get; set; } 

    //user 
    public virtual User User { get; set; } 
    [Required(ErrorMessage = "This field is required.")] 
    public int UserID { get; set; } 

} 

ものは重要ではありませんので、私は、他の非リレーショナルすべてのフィールドを削除しました。

+0

は、あなたのプロジェクトと情報のクラスにコードを投稿することができますことを流暢APIを使用して関係をマッピングし、少なくとも1つの関係を指定する必要がありますか?まずEntity Frameworkデザイナまたはコードを使用していますか? – BZink

+0

まずエンティティとコードを使用します。 – lovefaithswing

答えて

5

UserIDが両方のエンティティに必要であり、ProjectIDInformationエンティティに必要です。 Userを削除すると、複数のカスケードパスが作成されます。 User - >InformationおよびUser - >Project - >Informationです。

あなたはWillCascadeOnDelete(false)

public class MyContext : DbContext 
{ 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<User>() 
        .HasMany(u => u.Informations) 
        .HasRequired(i => i.User) 
        .HasForeignKey(i => i.UserID) 
        .WillCascadeOnDelete(false); 
    } 
} 
関連する問題