【发布时间】:2020-03-21 10:45:12
【问题描述】:
本质上,我试图使用 PostgreSQL 实体框架定义一对多关系的一侧,并产生以下错误:
System.InvalidOperationException: '无法确定'TypeDao' 类型的导航属性'UserDao.TypeDao' 表示的关系。手动配置关系,或使用“[NotMapped]”属性或使用“OnModelCreating”中的“EntityTypeBuilder.Ignore”忽略此属性。
所以有点细节:
我正在使用使用 Razor 页面的 asp.net core 3.1,数据库是 Postgres 12.2,我正在使用 Npgsql.EntityFrameworkCore.PostgreSQL 3.1.2
这是从使用 SQL Server 的 EntityFramework 6.x 的 MVC 项目转换而来的
这是一个现有的大型数据库,因此不使用迁移,而是手动编码数据访问对象和上下文。
我会讲两个数据访问类UserDao和TypeDao
TypeDao 在整个数据库中的数百个表中使用,所以我想要实现的是 UserDao 有一个 TypeDao 和 TypeDao“可以在”很多用户中使用。所以我不想要一个集合,实际上是数百个集合,在 UserDao、ProductDao 等的 TypeDao 对象中。
这里是我的 UserDao 和 TypeDao 数据访问对象的精简版本:
[Table("user", Schema = "shared_kernal")]
public class UserDao
{
[Key]
[Column("id")]
public Guid Id { get; set; }
[Column("type_id")]
public Guid? TypeId { get; set; }
[ForeignKey("TypeId")]
public TypeDao Type { get; set; }
}
[Table("type", Schema = "shared_kernal")]
public class TypeDao
{
[Key]
[Column("id")]
public Guid Id { get; set; }
[Column("creator_id")]
public Guid CreatorId { get; set; }
[ForeignKey("CreatorId")]
public UserDao Creator { get; set; }
}
如您所见,在 Type 中定义了一个关系返回到作为创建者的用户,因为可以添加新类型,但没有任何关系打算成为 User 到 Type 中定义的关系的另一端
这感觉像是错误的可能根源,因为它很可能会混淆 ef 推断我不希望 Creator 关系成为 User 中 Type 关系的另一端。
那么...怎么做呢?
【问题讨论】:
标签: c# postgresql entity-framework-core