如何在ASP.Net MVC 5 - Fluent API中处理多个到多个相同的表(用户)

时间:2017-08-20 16:38:39

标签: c# asp.net asp.net-mvc entity-framework ef-fluent-api

我正在学习ASP.Net MVC 5,我坚持使用一个基本的DB设计。 所以,我有一个用户可以在工作中推荐很多人 此外,很多人都可以申请获得自己的推荐。我创造了两个角色,所有这些都得到了照顾。现在,我上课时称为推荐,它将跟踪需要完成的每个推荐实例。

推介模式:

Public class Referral
{
     [Key]
        public int ReferralId { get; set; }
        public Company Company { get; set; }
        public int CompanyId { get; set; }
        public ApplicationUser User { get; set; }
        public string CandidateId { get; set; } // Application User ID of person asking for referral
        public string ReferrerId { get; set; } // Application user ID of person referring the candidate
}

ApplicationUser Model

  public class ApplicationUser : IdentityUser
    {
        public ICollection<Referral> Referrals { get; set; }
        // rest prop removed for brevity sake
    }

现在,假设A(推荐人)指的是B(候选人)。我的表格行如下所示。

ReferralId     CompanyId     CandidateId   ReferrerId

1              1             B             A

所以,非常好。但我想在推荐表上建立FK关系。我是Fluent API的新手,但我尝试过如下。

    // one candidate can have many referrals
    dBModelBuilder.Entity<ApplicationUser>()
    .HasMany(u => u.Referrals)
    .WithRequired(u => u.User)
    .HasForeignKey(u => u.CandidateId)
    .WillCascadeOnDelete(false);

    //one referrar can have many referrals
    dBModelBuilder.Entity<ApplicationUser>()
    .HasMany(u => u.Referrals)
    .WithRequired(u => u.User)
    .HasForeignKey(u => u.ReferrerId);

但EF只尊重一种关系。为什么外键关系没有设置。如果我发表评论,那么其他作品,反之亦然。但是如图所示将它们保持在一起永远不会有效。

预期行为:我预计会有两个FK关系。一旦我有了,那么我可以相应地工作。请指导我。我是这一切的新手。

enter image description here

1 个答案:

答案 0 :(得分:1)

正如@SLaks在评论中提到的,为了拥有两个关系,您需要两个 havigation属性(每个FK一个)。

所以在 one 一边用这样的东西替换File>Preference>Network>Host-only Networks属性:

Referrals
许多端将<{1}}属性替换为:

public class ApplicationUser : IdentityUser
{
    // ...
    public ICollection<Referral> ReferrerOf { get; set; }
    public ICollection<Referral> CandidateOf { get; set; }
}

并将它们与流畅的API相关联:

User

导航属性的名称在您正确关联它们之后并不重要。