.net mvc与实体的周期性参考问题

时间:2011-09-09 20:54:47

标签: .net entity-framework asp.net-mvc-3

我知道其他人发布了这个,但我找不到与我的问题相符的答案。虽然我是.net的新手,所以我可能只是不明白。

我的网站有一个项目对象,由特定用户拥有。该项目还有其他用户可以添加的额外信息模型。

我的模特就像:

项目

  • 项目业主FK
  • 其他东西

信息

  • Project FK
  • 信息所有者FK
  • 其他东西

但我收到错误引用关系将导致不允许循环引用。

我认为我对项目和信息中的用户都有fk感到不安。但是用户是不同的,所以我无法摆脱一个。有没有办法告诉它?

同样,我是.net的新手,所以我希望这不是一个愚蠢的问题。我来自django背景,如果这有助于解释。

代码:

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; }

}

我删除了所有其他非关系字段,因为这些字段并不重要。

1 个答案:

答案 0 :(得分:5)

两个实体都需要

UserIDProjectID实体需要Information。如果您删除User,这将创建多个级联路径。 User - > InformationUser - > Project - > Information

您必须使用Fluent API映射关系,并指定至少一个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);
    }
}