Entity Framework Core 7 - 配置两个键

问题描述 投票:0回答:1

我有以下实体:

public class Account : Entity
{
    // ...
    public long RoleID { get; set; }
    public Role Role { get; set; }
}

public class Role : Entity
{
    // ...
}

public abstract class Entity
{
    public long ID { get; set; }
    public string? UUID { get; set; }
    // ...
}

最初,我尝试基于

UUID
列而不是
ID
对实体执行更新,但我不想必须先获取实体,然后执行更新。我知道 EF Core 需要主键来跟踪和更新实体,但是有没有办法将其配置为使用另一个属性?

在第二次尝试中,我尝试使

UUID
成为主键,并使用
ID
HasAlternateKey
列配置为辅助键,因为我希望
ID
列仍用于实体之间的关系。

我的配置如下:

modelBuilder.Entity<Account>
(
    e => e.HasOne(a => a.Role)
          .WithMany()
          .HasForeignKey(a => a.RoleID)
);
modelBuilder.Entity<Account>
(
    e => e.HasKey(a => a.UUID)
);
modelBuilder.Entity<Role>
(
    e => e.HasAlternateKey(r => r.ID)       
);

目标是维持

ID
列所建立的关系,但最终抛出以下错误:

具有外键属性 {'RoleID' : long} 的从 'Account.Role' 到 'Role' 的关系无法定位主键 {'UUID' : string},因为它不兼容。为此关系配置一个主键或一组具有兼容类型的外键属性。

.net entity-framework-core primary-key .net-7.0 fluent
1个回答
0
投票

尝试理解你的问题。抱歉,我无法发表评论,但似乎您正在尝试返回一个对象以根据其 UUID 进行更新

查看此链接

https://learn.microsoft.com/en-us/ef/core/querying/

© www.soinside.com 2019 - 2024. All rights reserved.