我有 2 个表,其中多列指向一个实体或表。
[Table("opcr")]
public class Opcr
{
[Key]
public int Id { get; set; }
[Required]
public string? Title { get; set; }
[Required]
public string DepartmentHeadId { get; set; }
[ForeignKey(nameof(DepartmentHeadId))]
public ApplicationUser DepartmentHead { get; set; }
[Required]
public string EvaluatedById { get; set; }
[ForeignKey(nameof(EvaluatedById))]
public ApplicationUser EvaluatedBy { get; set; }
[Required]
public string ReviewedById { get; set; }
[ForeignKey(nameof(ReviewedById))]
public ApplicationUser ReviewedBy { get; set; }
}
using Microsoft.AspNetCore.Identity;
using System.ComponentModel.DataAnnotations;
namespace LGU_HR.Models;
public class ApplicationUser : IdentityUser
{
[Required]
[MaxLength(50)]
public string? FirstName { get; set; }
[Required]
[MaxLength(50)]
public string? LastName { get; set; }
// if I uncomment this, I'll get an error
// public ICollection<Opcr> DepartmentHead { get; }
// public ICollection<Opcr> EvaluatedBy { get; }
// public ICollection<Opcr>? ReviewedBy { get; }
}
我想要此连接,以便我可以通过用户搜索
OPCR
表。这是一对多关系,但是当我取消注释 DepartmentHead
上的 ApplicationUser
时,出现以下错误:
无法创建类型为“”的“DbContext”。异常“无法确定类型为“ICollection”的导航“ApplicationUser.DepartmentHead”表示的关系。手动配置关系,或者使用“[NotMapped]”属性或使用“OnModelCreating”中的“EntityTypeBuilder.Ignore”忽略此属性。尝试创建实例时抛出。对于设计时支持的不同模式
我已阅读此文档,但他们没有这个示例。
有人可以解释一下这种情况吗?不知道我哪里错了。
我认为这是因为你没有遵守命名约定,在集合的情况下应该只是实际名称
Opcrs
- 在你的情况下这当然是不可能的,因为属性名称必须是唯一的。
此外,尝试思考 EF 现在如何将哪个集合对应于
Opcr
中的哪个外键?这很模糊。
您需要明确定义该关系,例如:
modelBuilder.Entity<ApplicationUser>()
.HasMany(t => t.DepartmentHead)
.WithOne(t => t.DepartmentHead)
与其他属性类似。