我想使用Fluent API进行映射。我看到了一些其他的例子,但这些看起来与我想做的不同。
这是我的SQL:
ALTER TABLE [Question] ADD CONSTRAINT [FK_QuestionUserProfile]
FOREIGN KEY([AssignedTo]) REFERENCES [UserProfile] ([UserId])
这给了我这个错误信息:
There are no primary or candidate keys in the referenced table 'UserProfile'
that match the referencing column list in the foreign key 'FK_QuestionUserProfile'
Could not create constraint
我有两个班级:
public class Question
{
public int QuestionId { get; set; }
public string Text { get; set; }
public int AssignedTo { get; set; }
public int ModifiedBy { get; set; }
public virtual UserProfile UserProfile { get; set; }
}
public partial class UserProfile
{
public UserProfile()
{
this.webpages_Roles = new List<webpages_Roles>();
}
public int UserId { get; set; }
public string UserName { get; set; }
public virtual ICollection<webpages_Roles> webpages_Roles { get; set; }
public virtual ICollection<Question> Questions { get; set; }
}
我想在问题&lt;&gt;之间进行映射UserProfile使:
到目前为止,我的问题地图
this.HasRequired(t => t.UserProfile)
.WithMany(t => t.Questions)
.HasForeignKey(d => d.AssignedTo);
this.HasRequired(t => t.UserProfile)
.WithMany(t => t.Questions)
.HasForeignKey(d => d.ModifiedBy);
但是这会起作用,因为ForeignKey将AssignedTo作为UserProfile中Question和UserId中的名称。是 在映射中我可以指定它们应该映射到UserId吗?
答案 0 :(得分:1)
主表中的外键和主键不必具有相同的名称。将AssignedTo
映射到UserId
没问题。但是,您尝试定义两个关系,为此,您还需要两个导航属性。您不能在两个关系中使用UserProfile
作为导航属性,也不能两次使用Questions
集合。您可以像这样更改Question
实体(UserProfile
可以保持不变):
public class Question
{
public int QuestionId { get; set; }
public string Text { get; set; }
public int AssignedTo { get; set; }
public int ModifiedBy { get; set; }
public virtual UserProfile AssignedToUser { get; set; }
public virtual UserProfile ModifiedByUser { get; set; }
}
然后创建此映射:
this.HasRequired(t => t.AssignedToUser)
.WithMany(t => t.Questions)
.HasForeignKey(d => d.AssignedTo);
this.HasRequired(t => t.ModifiedByUser)
.WithMany() // <- don't use "t => t.Questions" here again
.HasForeignKey(d => d.ModifiedBy)
.WillCasadeOnDelete(false);
对于两个关系中的至少一个,必须禁用级联删除。否则,SQL Server会抱怨多个级联删除路径。
但是,这一切都不会修复创建外键约束时的异常。此错误表示UserProfile.UserId
不是UserProfile
表中的主键(或通常它没有唯一约束)。也许UserId
只是复合主键的一部分(或许UserId
+ UserName
)?