que tienen la siguiente estructura de datos:Marco de la entidad multiusuario arquitectura de datos compartida: una sola columna, varias claves externas
//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;
}
me sale el siguiente error:
The foreign key component 'TenantId' is not a declared property on type 'SpecialOrder'. Verify that it has not been explicitly excluded from the model and that it is a valid primitive property.
error se produce utilizando la configuración de la API Fluido :
config.HasRequired(p => p.OtherClass)
.WithMany(oc => oc.SpecialOrders)
.HasForeignKey(p => new { p.TenantId, p.OtherClassId});
Sin la referencia en OtherClass
SpecialOrder
Puedo crear objetos libremente sin problemas (incluidos SpecialOrder
, SuperSpecialOrder
, etc.).
¿Alguien tiene una idea de lo que está pasando? Estoy perdido aquí :(
Editar que he visto en otras preguntas que la gente saque el mecanismo TenantId de las tablas, esto no es una opción ya que las claves primarias no son únicos a través de los inquilinos y queremos mantener el compartida arquitectura de datos.
sé que la solución es tener una segunda TenantId en la clase SpecialOrder, pero esto no parece lógico.
Creo que es el mismo tipo de problema como este: http: // stackoverflow.com/questions/10961690/inheritance-and-composite-foreign-keys-one-part-of-the-key-in-base-class-the ¿Podría mostrar su asignación de forma más precisa? ¿Qué es 'config'? Supongo que una 'EntityTypeConfiguration 'con' T' = 'SpecialOrder', ¿verdad? ¿Cómo se ve el mapeo de 'Order.Customer'? ¿Creas este mapeo con 'T' =' SpecialOrder' o 'T' =' Order'? –
Slauma
El problema surge cuando especifico una asignación para Order y SpecialOrder. Luego pierde de vista cualquier propiedad declarada en la clase base en SpecialOrder. Parece ser la misma pregunta de hecho. – Bas