Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架中相同类型的多个外键_C#_Sql Server_Asp.net Mvc_Entity Framework_Ef Code First - Fatal编程技术网

C# 实体框架中相同类型的多个外键

C# 实体框架中相同类型的多个外键,c#,sql-server,asp.net-mvc,entity-framework,ef-code-first,C#,Sql Server,Asp.net Mvc,Entity Framework,Ef Code First,我有一个问题实体,有两个字段作为FK到用户实体,如下所示。虽然我正确配置了属性,以防止创建额外的Xxx\u Id字段而不是PropertyNameId,但表中除了PropertyNameId字段之外,还创建了一个Xxx\u Id字段。在本例中,除了AssigneeId和ReporterId字段外,还将在问题表中创建User_Id字段。这里有什么错误吗?是否在导致此额外用户Id字段的用户实体中设置哈希 问题: 用户: 当您试图创建同一类型的多个ForeignKey时 您的模型类设置应如下所示: p

我有一个问题实体,有两个字段作为FK到用户实体,如下所示。虽然我正确配置了属性,以防止创建额外的Xxx\u Id字段而不是PropertyNameId,但表中除了PropertyNameId字段之外,还创建了一个Xxx\u Id字段。在本例中,除了AssigneeId和ReporterId字段外,还将在问题表中创建User_Id字段。这里有什么错误吗?是否在导致此额外用户Id字段的用户实体中设置哈希

问题:

用户:


当您试图创建同一类型的多个ForeignKey时 您的模型类设置应如下所示:

public class User : BaseEntity
{
    public User()
    {
        ReporterIssues = new HashSet<Issue>();
        AssigneeIssues = new HashSet<Issue>();
    }

    [Key]
    public short Id { get; set; }
    public string UserName { get; set; }
    public string Email { get; set; }

    // Navigation properties
    public virtual ICollection<Issue> ReporterIssues { get; set; }
    public virtual ICollection<Issue> AssigneeIssues { get; set; }
}

public class Issue : BaseEntity
{
    [Key]
    public int Id { get; set; }
    public short ReporterId { get; set; }
    public short AssigneeId { get; set; }

    // Navigation properties
    public virtual User Reporter { get; set; }
    public virtual User Assignee { get; set; }
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<User>().HasMany(u => u.AssigneeIssues)
            .WithRequired(i => i.Assignee).HasForeignKey(a => a.AssigneeId)
            .WillCascadeOnDelete(false); // <-- cascade delete must be false

        modelBuilder.Entity<User>().HasMany(u => u.ReporterIssues)
            .WithRequired(i => i.Reporter).HasForeignKey(a => a.ReporterId)
            .WillCascadeOnDelete(false); // <-- cascade delete must be false
 }

你能发布BaseEntity类的内容吗?有问题了!我正在彻底回答。@NguyenThanh我补充道,谢谢…@TanvirArjel非常感谢,我在等待你的答复…非常感谢Tanvir。几年前我使用了[InverseProperty],你是对的,问题是使用多个相同类型的FK,这似乎解决了问题。在继续之前:1我可以使用您在模型创建部件上注释掉并省略的[InverseProperty]吗?因为我以前是这样做的。有什么想法吗?2如果我使用OnModelCreating部分,就不需要使用您注释掉的[InverseProperty]部分,是这样吗???您可以省略[InverseProperty]。但是OnModelCreating是必须的,因为级联删除必须关闭。查看我更新的答案并阅读代码注释。我已经从答案中删除了inverse属性。出于好奇,我可以只使用[InverseProperty]方法而不是OnModelCreating方法并省略OnModelCreating部分吗?请阅读我以前的注释!
CreateTable(
            "Issue",
            c => new
                {
                    Id = c.Int(nullable: false, identity: true),
                    ReporterId = c.Short(nullable: false),
                    AssigneeId = c.Short(nullable: false),
                    User_Id = c.Short() //???
                })
            .PrimaryKey(t => t.Id)
            .ForeignKey("com.User", t => t.User_Id)  //???
            .ForeignKey("com.User", t => t.AssigneeId)
            .ForeignKey("com.User", t => t.ReporterId)
            .Index(t => t.ReporterId)
            .Index(t => t.AssigneeId)
            .Index(t => t.User_Id);  //???
public class User : BaseEntity
{
    public User()
    {
        ReporterIssues = new HashSet<Issue>();
        AssigneeIssues = new HashSet<Issue>();
    }

    [Key]
    public short Id { get; set; }
    public string UserName { get; set; }
    public string Email { get; set; }

    // Navigation properties
    public virtual ICollection<Issue> ReporterIssues { get; set; }
    public virtual ICollection<Issue> AssigneeIssues { get; set; }
}

public class Issue : BaseEntity
{
    [Key]
    public int Id { get; set; }
    public short ReporterId { get; set; }
    public short AssigneeId { get; set; }

    // Navigation properties
    public virtual User Reporter { get; set; }
    public virtual User Assignee { get; set; }
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<User>().HasMany(u => u.AssigneeIssues)
            .WithRequired(i => i.Assignee).HasForeignKey(a => a.AssigneeId)
            .WillCascadeOnDelete(false); // <-- cascade delete must be false

        modelBuilder.Entity<User>().HasMany(u => u.ReporterIssues)
            .WithRequired(i => i.Reporter).HasForeignKey(a => a.ReporterId)
            .WillCascadeOnDelete(false); // <-- cascade delete must be false
 }