我正在学习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关系。一旦我有了,那么我可以相应地工作。请指导我。我是这一切的新手。
答案 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
导航属性的名称在您正确关联它们之后并不重要。