2013-02-19 2 views
0

Я новичок в коде EF и пытаюсь заставить свойство навигации ICollection использовать определенную таблицу отношений, которую я создал вручную для сопоставления объектов.Код EF сначала определяет таблицу отношений для свойства навигации

Причина, по которой я вынужден сделать это, заключается в том, что у меня есть столбец TenantId на всех моих таблицах. Это возможно?

[Table("Tenants")] 
public class Tenant 
{ 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 

    // This should use ContactAddressesForTenants table 
    public virtual ICollection<Address> ContactAddresses {get; set;} 

} 

[Table("BusinessProfiles")] 
public class BusinessProfile 
{ 
    [Key, ForeignKey("Tenant")] 
    public int TenantId { get; set; } 

    public virtual Tenant Tenant { get; set; } 

    // This should use the AddressesForBusinessProfiles table 
    public virtual ICollection<Address> ProfileAddresses { get; set; } 
} 

[Table("Addresses")] 
public class Address 
{ 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 

    [ForeignKey("Tenant")] 
    public int TenantId { get; set; } 
} 

[Table("ContactAddressesForTenants")] 
public class ContactAddressForTenant 
{ 
    [ForeignKey("Tenant")] 
    public int TenantId { get; set; } 

    [ForeignKey("Address")] 
    public int AddressId { get; set; } 

    public virtual Tenant Tenant { get; set; } 

    public virtual Address Address {get; set;} 
} 

[Table("AddressesForBusinessProfiles")] 
public class AddressForBusinessProfile 
{ 
    [ForeignKey("BusinessProfile")] 
    public int TenantId { get; set; } 

    [ForeignKey("Address")] 
    public int AddressId { get; set; } 

    public virtual BusinessProfile BusinessProfile { get; set; } 

    public virtual Address Address { get; set; } 
} 

ответ

0

Если я правильно понимаю вас. Вы можете попробовать изменить это в своей модели.

Где:

// This should use ContactAddressesForTenants table 
public virtual ICollection<Address> ContactAddresses {get; set;} 
// This should use the AddressesForBusinessProfiles table 
public virtual ICollection<Address> ProfileAddresses { get; set; } 

Изменить на:

public virtual ICollection<ContactAddressForTenant> ContactAddresses {get; set;} 
public virtual ICollection<AddressForBusinessProfile> ProfileAddresses { get; set; } 
Смежные вопросы