ef core - 相同表的两种不同关系
ef core - two different relationships for the same tables
我有两个表,它们有两种不同的关系:
class Suggestion {
Guid Id { get; set; }
Guid LastRevisionId { get; set; }
SuggestionRevision LastRevision { get; set; }
ICollection<SuggestionRevision> SuggestionRevisions { get; set; }
}
class SuggestionRevision {
Guid Id { get; set; }
Guid SuggestionId { get; set; }
Suggestion Suggestion { get; set; }
}
我一个建议可以有很多建议修改。这是一对多的关系。
此外,我保留了另一列 LastRevision
,以便使用 Include()
轻松访问 Entity Framework 中建议的最新修订,这是一对一的关系(至少我希望它是)。
我有 OnModelCreating
如下:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Suggestion>()
.HasMany(b => b.SuggestionRevisions)
.WithOne(w => w.Suggestion);
modelBuilder.Entity<Suggestion>()
.HasOne(b => b.LastRevision)
.WithOne()
.OnDelete(DeleteBehavior.Restrict);
}
但是,这没有用。
我该如何配置?
此外,保留最后的修订版 ID 是合乎逻辑的设计选择吗?好像我遗漏了什么...
我在这个post中找到了答案:我的模型配置如下:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<SuggestionRevision>()
.HasOne(b => b.Suggestion)
.WithMany(w => w.SuggestionRevisions)
.HasForeignKey(w => w.SuggestionId);
modelBuilder.Entity<Suggestion>()
.HasOne(b => b.LastRevision)
.WithOne()
.HasForeignKey<Suggestion>(w => w.LastRevisionId);
}
我想关键是确定主表和参考表。
我有两个表,它们有两种不同的关系:
class Suggestion {
Guid Id { get; set; }
Guid LastRevisionId { get; set; }
SuggestionRevision LastRevision { get; set; }
ICollection<SuggestionRevision> SuggestionRevisions { get; set; }
}
class SuggestionRevision {
Guid Id { get; set; }
Guid SuggestionId { get; set; }
Suggestion Suggestion { get; set; }
}
我一个建议可以有很多建议修改。这是一对多的关系。
此外,我保留了另一列 LastRevision
,以便使用 Include()
轻松访问 Entity Framework 中建议的最新修订,这是一对一的关系(至少我希望它是)。
我有 OnModelCreating
如下:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Suggestion>()
.HasMany(b => b.SuggestionRevisions)
.WithOne(w => w.Suggestion);
modelBuilder.Entity<Suggestion>()
.HasOne(b => b.LastRevision)
.WithOne()
.OnDelete(DeleteBehavior.Restrict);
}
但是,这没有用。 我该如何配置?
此外,保留最后的修订版 ID 是合乎逻辑的设计选择吗?好像我遗漏了什么...
我在这个post中找到了答案:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<SuggestionRevision>()
.HasOne(b => b.Suggestion)
.WithMany(w => w.SuggestionRevisions)
.HasForeignKey(w => w.SuggestionId);
modelBuilder.Entity<Suggestion>()
.HasOne(b => b.LastRevision)
.WithOne()
.HasForeignKey<Suggestion>(w => w.LastRevisionId);
}
我想关键是确定主表和参考表。