【发布时间】:2021-10-14 13:47:47
【问题描述】:
在 EF Core 3.1 中,我正在尝试为我的基类实现 并发令牌。我遇到了存储在派生类拥有实体的共享表中的实体的问题。当派生类拥有单个属性时,建议将此属性创建为基类上的影子属性。但是,对于代表拥有类型的属性,我不知道该怎么做。我试图避免为拥有类型中的每个属性添加影子属性。
派生所有实体的类:
public class EntityClass
{
///...
[Timestamp]
public byte[] ConcurrencyToken { get; set; }
}
一个基类和拥有一个额外拥有类型的派生类的例子:
public class Transaction : EntityClass
{
///...
public Company Counterparty { get; set; }
public Currency TransactionCurrency { get; set; }
}
public class CashTransaction : Transaction
{
///...
public Currency BankAccountCurrency { get; set; }
}
Currency 是一个拥有的模型,其属性存储在与Transaction 相关的表中:
[Owned, ComplexType]
public class Currency
{
///...
public string CurrencyName { get; set; }
public string CurrencySymbol { get; set; }
}
当我添加迁移时,显示以下错误:
实体类型“CashTransaction.BankAccountCurrency#Currency”不包含映射到存储生成的并发令牌列“ConcurrencyToken”的属性,该列由共享表“Transaction”的另一个实体类型使用。将映射到同一列的商店生成的属性添加到“CashTransaction.BankAccountCurrency#Currency”。它可以处于阴影状态。
我尝试了几次配置shadow属性,例如:
modelBuilder.Entity<Transaction>().OwnsOne<Currency>("BankAccountCurrency");
【问题讨论】: