我有两个通过外键“PickingListId”链接的类。它们都从 SQL 视图中绘制数据,因此我将 PickingList 重命名为 PickingListView。它之前工作得很好,因为它似乎正确猜测了外键(PickingListId)。但是现在它试图猜测外键是“PickingListViewId”,所以我尝试显式标记外键。
以下是我的两节课。我删除了 [Key] 和 [ForeignKey] 注释,认为它们可能与 Fluent API 发生冲突。
public class PickingListView
{
public int PickingListId { get; set; }
public ICollection<PickingListLine> Lines { get; set; }
}
public class PickingListLine
{
public int PickingListLineId { get; set; }
public int PickingListId { get; set; }
public PickingListView PickingListView { get; set; }
}
以下是我的 Fluent API 配置:
modelBuilder.Entity<PickingListView>(entity =>
{
entity.ToView("view_PickingList").HasKey(e => e.PickingListId);
entity.HasMany(e => e.Lines)
.WithOne(e => e.PickingListView)
.HasForeignKey(e => e.PickingListId)
.IsRequired();
});
modelBuilder.Entity<PickingListLine>(entity =>
{
entity.ToView("view_PickingListLine").HasKey(e => e.PickingListLineId);
entity.Property(e => e.PickingListId).HasColumnName("PickingListId");
entity.HasOne(e => e.PickingListView)
.WithMany(e => e.Lines)
.HasForeignKey(e => e.PickingListId);
});
自从在 Fluent API 中将配置添加到 PickingListLine 后,我现在收到错误
Microsoft.Data.SqlClient.SqlException(0x80131904):列名“PickingListId1”无效。
我查看了生成的 SQL,并且连接正确地使用了 PickingListId,但是它试图选择不存在的 PickingListId1 列。
如何正确地将 PickingListLine 的 PickingListId 标记为链接到 PickingListView 类的外键?
1
Microsoft.Data.SqlClient.SqlException(0x80131904):列名“PickingListId1”无效。
此错误表示 Entity Framework Core 生成的 SQL 语句使用了不存在的列
PickingListId1
。这通常是由于不正确的配置或重复问题造成的。
确保您的列名称拼写正确。
2
entity.Property(e => e.PickingListId).HasColumnName("PickingListId");
如果数据库中的列名与属性名相同,则可以省略
HasColumnName
配置。