Многопользовательская архитектура общих данных Entity Framework :один столбец, несколько внешних ключей

У меня есть следующая структура данных:

//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;
}

Я получаю следующую ошибку:

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.

Ошибка возникает при использовании конфигурации Fluent API :

        config.HasRequired(p => p.OtherClass)
           .WithMany(oc => oc.SpecialOrders)
           .HasForeignKey(p => new {  p.TenantId, p.OtherClassId});

. Без ссылки OtherClassв SpecialOrderя могу свободно создавать объекты без проблем (, включая SpecialOrder, SuperSpecialOrderи т. д. ).

Кто-нибудь знает, что происходит? Я здесь потерялся:(

Изменить В других вопросах я видел, что люди удаляют TenantId из таблиц, это не вариант, поскольку первичные ключи не уникальны для клиентов, и мы хотим сохранить общую архитектуру данных.

Я знаю, что обходным путем является наличие второго TenantId в классе SpecialOrder, но мне это не кажется логичным.

8
задан Bas 16 August 2012 в 10:07
поделиться