【发布时间】:2023-03-27 06:25:01
【问题描述】:
这里的问题是如何生成由两个外键组成的复合主键?
我试过了:
public class ActiveQuestions_Questions
{
[Column(Order = 0), Key, ForeignKey("ActiveQuestion")]
public string ActiveQuestionId {get; set;}
[Column(Order = 1), Key, ForeignKey("Question")]
public string QuestionId {get; set; }
}
这给了我:实体类型“ActiveQuestions_Questions”具有使用数据注释定义的复合主键。要设置复合主键,请使用 fluent API。
然后我尝试在没有注释的模型构建器中使用流利的 api。
builder.Entity<ActiveQuestions_Questions>(
build =>
{
build.HasKey(t => new {t.ActiveQuestionId, t.QuestionId});
build.HasOne(t => t.QuestionId).WithOne().HasForeignKey<Question>(qe => qe.QuestionId);
build.HasOne(t => t.ActiveQuestionId).WithOne().HasForeignKey<ActiveQuestion>(qe => qe.ActivateQuestionId);
}
);
这给了我: 导航属性“QuestionId”无法添加到实体类型“ActiveQuestions_Questions”,因为实体类型“ActiveQuestions_Questions”上已存在同名属性。
谁能指出我正确的方向?
问题类
public class Question
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public string QuestionId {get; set;}
[Required]
public string Text {get; set;}
}
ActiveQuestion 类:
public class ActiveQuestion
{
private DateTime _lastUpdated = DateTime.Now;
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public string ActivateQuestionId {get; set;}
public DateTime LastUpdated
{
get
{
return this._lastUpdated;
}
set
{
this._lastUpdated = value;
}
}
}
【问题讨论】:
-
能否贴出
Question和ActiveQuestion实体的相关部分(至少包含PK属性和ActiveQuestions_Questions相关导航属性) -
@IvanStoev 添加了 Question 和 ActiveQuestion 类。
-
谢谢。我认为当前发布的答案正在涵盖此案。如果不清楚,PK fluent 配置是正确的,但两个 FK 都不是。
build.HasOne(t => t.QuestionId)应该是build.HasOne<Qustion>()和build.HasOne(t => t.ActiveQuestionId)应该是build.HasOne<ActiveQuestion>()以反映您的实体类中缺少导航属性。 -
谢谢@IvanStoev :)