我有以下实体:
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},因为它不兼容。为此关系配置一个主键或一组具有兼容类型的外键属性。
尝试理解你的问题。抱歉,我无法发表评论,但似乎您正在尝试返回一个对象以根据其 UUID 进行更新
查看此链接