entity-framework-core - EF Core 无法确定“ICollection”类型的导航属性“Colour.ColourGroups”表示的关系'
问题描述
我在旧数据库中有以下 3 个表。
CREATE TABLE Colour(
ColourCode char(3) NOT NULL,
CONSTRAINT PK_Colour PRIMARY KEY CLUSTERED
(
ColourCode ASC
)
CREATE TABLE ColourGroup(
ColourGroup varchar(6) NOT NULL,
CONSTRAINT PK_ColourGroup PRIMARY KEY CLUSTERED
(
ColourGroup ASC
)
CREATE TABLE Colour_ColourGroup(
ColourCode char(3) NOT NULL,
ColourGroup varchar(6) NOT NULL,
CONSTRAINT PK_Colour_ColourGroup PRIMARY KEY CLUSTERED
(
ColourCode ASC,
ColourGroup ASC
)
ALTER TABLE Colour_ColourGroup WITH CHECK ADD CONSTRAINT FK_Colour_ColourGroup_Colour FOREIGN KEY(ColourCode)
REFERENCES Colour (ColourCode)
ALTER TABLE Colour_ColourGroup WITH CHECK ADD CONSTRAINT FK_Colour_ColourGroup_ColourGroup FOREIGN KEY(ColourGroup)
REFERENCES ColourGroup (ColourGroup)
以及以下 EF 类在代码中表示它们
public class Colour
{
public string ColourId { get; set; }
public ICollection<ColourGroup> ColourGroups { get; set; }
}
public class ColourGroup
{
public string ColourGroupId { get; set; }
public ICollection<Colour> Colours { get; set; }
}
public class ColourColourGroup
{
public string ColourId { get; set; }
public string ColourGroupId { get; set; }
public Colour Colour { get; set; }
public ColourGroup ColourGroup { get; set; }
}
我正在使用 Fluent API 将 ColourColourGroup 链接到 Colour_ColourGroup 表并指定一些数据库列名。
builder.Entity<Colour>(entity =>
{
entity.Property(e => e.ColourId).HasColumnType("char(3)")
.HasColumnName("ColourCode");
entity.Property(e => e.FinishId).HasMaxLength(3);
entity.Property(e => e.Description).HasMaxLength(30);
entity.HasKey(e => e.ColourId);
});
builder.Entity<ColourGroup>(entity =>
{
entity.Property(e => e.ColourGroupId).HasMaxLength(6)
.HasColumnName("ColourGroup");
entity.HasKey(e => e.ColourGroupId);
});
builder.Entity<ColourColourGroup>(entity =>
{
entity.ToTable("Colour_ColourGroup");
entity.Property(e => e.ColourGroupId).HasMaxLength(6)
.HasColumnName("ColourGroup");
entity.Property(e => e.ColourId).HasMaxLength(3)
.HasColumnName("ColourCode");
entity.HasKey(e => new { e.ColourId, e.ColourGroupId });
});
但我不知道如何将 3 个表链接在一起。如果它只是 Color 和 ColourGroup 之间的一对多关系,我认为您会在 ColourGroup.Colours 上使用 InverseProperty(或 Fluent 等价物)。
访问这些实体的任何查询都会因上述错误而失败,例如:
var group = _context.ColourGroups.Where(g => g.ColourGroupId == "ALLPC").FirstOrDefault();
如何告诉 EF Colour.ColourGroups 和 ColourGroup.Colours 属性由 ColourColourGroup 中的相应属性“映射”?
解决方案
推荐阅读
- pip - 如何为 pip 设置超时,以便我可以在不可靠的 Internet 连接上下载包?
- c# - Guid.NewGuid() 在 Parallel.For 循环中使用时返回重复值
- ios - SwiftUI:将动态数据传递给内容视图后重绘
- keycloak - 钥匙斗篷模拟
- ios - 如何设置/更改 CGImage 上的 alphaInfo?
- reactjs - React 项目无法在 git 子模块中使用节点模块
- tensorflow - 为什么 SSD 在数据增强期间会调整随机作物的大小?
- java - 从 EC 点和 ECParameterSpec 构造 EC 公钥会给出无效的 x 值
- ios - Flutter on Mac OS 软件包问题
- python - 为什么安装pysam python包失败?