在 EF7 中添加多个相同类型的导航属性
Adding multiple navigation properties of the same type in EF7
我有一个看起来像这样的模型
public class Issue
{
public Guid Id { get; set; }
[Required]
public User ReportedByUser { get; set; }
public User ClosedByUser { get; set; }
public Category Category { get; set; }
}
但是,当我 运行 ef migrations add <MigrationName>
我收到以下错误:
The navigation 'ReportedByUser' on entity type 'WebProject.Models.Issue'
has not been added to the model, or ignored, or target entityType
ignored.
当我在模型中只有 1 个 User
类型的导航 属性 时,我没有收到此错误。我如何使用上面的模型进行这项工作?
当您首先使用迁移进行编码时,最好显式声明外键属性。
此外,如果您遵守此 属性 的约定 ReferencePropertyName + Id,则不必使用 ForeignKeyAttribute 修饰 class,因为 EF 会为您解析它。
public class Issue
{
public Guid Id { get; set; }
public Guid ReportedByUserId { get; set; }
public User ReportedByUser { get; set; }
public Guid ClosedByUserId { get; set; }
public User ClosedByUser { get; set; }
}
我能够通过在我的 DbContext 中设置以下关系来解决这个问题。
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Issue>()
.HasOne(i => i.ReportedByUser)
.WithMany(u => u.Issues)
.OnDelete(DeleteBehavior.Restrict);
modelBuilder.Entity<Issue>()
.HasOne(i => i.ClosedByUser)
.WithMany(u => u.Issues)
.OnDelete(DeleteBehavior.Restrict).IsRequired(false);
base.OnModelCreating(modelBuilder);
}
并像下面这样设置模型。
public class Issue
{
public Guid Id { get; set; }
[Required]
public User ReportedByUser { get; set; }
public User ClosedByUser { get; set; }
}
我有一个看起来像这样的模型
public class Issue
{
public Guid Id { get; set; }
[Required]
public User ReportedByUser { get; set; }
public User ClosedByUser { get; set; }
public Category Category { get; set; }
}
但是,当我 运行 ef migrations add <MigrationName>
我收到以下错误:
The navigation 'ReportedByUser' on entity type 'WebProject.Models.Issue' has not been added to the model, or ignored, or target entityType ignored.
当我在模型中只有 1 个 User
类型的导航 属性 时,我没有收到此错误。我如何使用上面的模型进行这项工作?
当您首先使用迁移进行编码时,最好显式声明外键属性。 此外,如果您遵守此 属性 的约定 ReferencePropertyName + Id,则不必使用 ForeignKeyAttribute 修饰 class,因为 EF 会为您解析它。
public class Issue
{
public Guid Id { get; set; }
public Guid ReportedByUserId { get; set; }
public User ReportedByUser { get; set; }
public Guid ClosedByUserId { get; set; }
public User ClosedByUser { get; set; }
}
我能够通过在我的 DbContext 中设置以下关系来解决这个问题。
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Issue>()
.HasOne(i => i.ReportedByUser)
.WithMany(u => u.Issues)
.OnDelete(DeleteBehavior.Restrict);
modelBuilder.Entity<Issue>()
.HasOne(i => i.ClosedByUser)
.WithMany(u => u.Issues)
.OnDelete(DeleteBehavior.Restrict).IsRequired(false);
base.OnModelCreating(modelBuilder);
}
并像下面这样设置模型。
public class Issue
{
public Guid Id { get; set; }
[Required]
public User ReportedByUser { get; set; }
public User ClosedByUser { get; set; }
}