【发布时间】:2020-11-27 21:15:43
【问题描述】:
我有一个名为“LogBookSystemUsers”的表,我想在 EF Core 5 中设置多对多的功能。我几乎可以让它工作,但问题是我的 ID 列被命名为 SystemUserId 和 LogBookId 但是当 EF 确实如此它尝试使用SystemUserID 和LogBookID 的连接。这是我当前的配置代码:
modelBuilder.Entity<SystemUser>()
.HasMany(x => x.LogBooks)
.WithMany(x => x.SystemUsers)
.UsingEntity(x =>
{
x.ToTable("LogBookSystemUsers", "LogBooks");
});
我试过了:
modelBuilder.Entity<SystemUser>()
.HasMany(x => x.LogBooks)
.WithMany(x => x.SystemUsers)
.UsingEntity<Dictionary<string, object>>("LogBookSystemUsers",
x => x.HasOne<LogBook>().WithMany().HasForeignKey("LogBookId"),
x => x.HasOne<SystemUser>().WithMany().HasForeignKey("SystemUserId"),
x => x.ToTable("LogBookSystemUsers", "LogBooks"));
但这只是添加了两个新列,而不是设置当前列的名称。
这是所有数据库优先。我不想为多对多表使用一个类,因为我在我的项目中完成了这一切,我不希望一堆无用的类四处飘荡。有什么想法吗?
【问题讨论】:
-
如果您指定的列名与 EF 按约定使用的列名相同(忽略大小写),似乎会发生这种情况。在 SQL Server 中,这会抛出,因为对象名称应该是唯一的,而与大小写无关。您似乎有一个名称区分大小写的数据库。只需尝试使用 f.e. 会发生什么。 FK 名称中的“_Id”。
-
是的,我使用的是 PostgreSQL,我认为它通常不区分大小写,但我们以区分大小写的方式使用它。
标签: c# postgresql entity-framework-core ef-core-5.0