Arquitetura de dados compartilhados de vários proprietários do Entity Framework: coluna única, várias chaves estrangeiras
Eu tenho a seguinte estrutura de dados:
//property Notification
abstract class BindableBase { }
//base class for all tenant-scoped objects
abstract class TenantModelBase : BindableBase
{
int TenantId;
}
abstract class Order : TenantModelBase
{
Customer Customer; //works: mapped using TenantId and CustomerId
Product Product; //again, works with TenantId and ProductId
string ProductId;
string CustomerId;
}
class Customer: TenantModelBase
{
string CustomerId;
}
class Product : TenantModelBase
{
string ProductId;
}
class SpecialOrder : Order
{
OtherClass OtherClass; //this fails!, see below
string OtherClassId;
}
class SuperSpecialOrder : SpecialOrder { }
class OtherClass : TenantModelBase
{
string OtherClassId;
}
Estou tendo o erro a seguir:
O componente de chave estrangeira 'TenantId' não é uma propriedade declarada no tipo 'SpecialOrder'. Verifique se ele não foi explicitamente excluído do modelo e se é uma propriedade primitiva válida.
Erro ocorre usando a configuração Fluent Api:
config.HasRequired(p => p.OtherClass)
.WithMany(oc => oc.SpecialOrders)
.HasForeignKey(p => new { p.TenantId, p.OtherClassId});
Sem oOtherClass
referência emSpecialOrder
Eu posso criar objetos livremente sem problemas (incluindoSpecialOrder
, SuperSpecialOrder
etc).
Alguém tem a menor ideia do que está acontecendo? Estou perdido aqui :(
Editar Já vi em outras perguntas que as pessoas removem o TenantId das tabelas, isso não é uma opção, pois as chaves primárias não são exclusivas entre os locatários e queremos manter a arquitetura de dados compartilhada.
Eu sei que a solução é ter um segundo TenantId na classe SpecialOrder, mas isso não parece lógico para mim.