gpt4 book ai didi

c# - 具有不同 ID 字段名称的 EF Fluent API 多对多

转载 作者:太空狗 更新时间:2023-10-29 23:07:05 26 4
gpt4 key购买 nike

在这个问题中:Ef Many To Many ,关于如何手动指定链接表的答案出现了。但我有一个稍微独特的情况(我确信这不是真正独特的)。

我的两个表各有一个 Id 字段。例如:[dbo].[Account].[Id][dbo].[Person].[Id]。我的 Code-First 中的每个表都有以下 OnModelCreating:

modelBuilder.Entity<Account>.HasKey(x => x.Id);
modelBuilder.Entity<Person>.HasKey(x => x.Id);

但是我的 [dbo].[AccountsToPersons]... 表有字段 E.G.:[AccountId][PersonId]

AccountsToPersons 表未由代码中的类表示。

我显然已经有了一个现有模型,但我们使用的是 EF Code-First Fluent API,而不是从数据库更新模型。

那么我该如何更改此代码以使其适用于映射不同的 ID 列名称?

public DbSet<Person> Persons { get; set; }
public DbSet<Account> Accounts { get; set; }
. . .
modelBuilder.Entity<Account>()
.HasMany(a => a.Persons)
.WithMany()
.Map(x =>
{
x.MapLeftKey("AccountId"); // <-- Account.Id to AccountsToPersons.AccountId??
x.MapRightKey("PersonId"); // <-- Person.Id to AccountsToPersons.PersonId??
x.ToTable("AccountsToPersons");
});

当运行基本的 Linq To EF 查询 (from x in context.Accounts select x).ToList(); 时,查询失败并出现以下错误:

  • “列名‘Person_Id’无效。”

但是当运行查询 (from x in context.Persons select x).ToList(); 时,我没有收到任何错误。

除了基本类型的列,我的模型还添加了这些:

// In my Account Model, I also have this property:
public IList<Person> Persons { get; set; }

// In my Person Model, I also have this property:
public IList<Account> Accounts { get; set; } // <-- in the Person model

请注意,即使我的帐户查询通过并具有字段信息,Persons 字段始终为空,即使我确定我的AccountsToPersons 中有链接> 表格。

最佳答案

尝试将 p => p.Accounts 添加到您的 WithMany 子句中:

modelBuilder.Entity<Account>()
.HasMany(a => a.Persons)
.WithMany(p => p.Accounts) // <-- I think this should fix it
.Map(x =>
{
x.MapLeftKey("AccountId"); // <-- Account.Id to AccountsToPersons.AccountId??
x.MapRightKey("PersonId"); // <-- Person.Id to AccountsToPersons.PersonId??
x.ToTable("AccountsToPersons");
});

关于c# - 具有不同 ID 字段名称的 EF Fluent API 多对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27067791/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com