0

Я google до конца, но не смог получить его полностью, here Я нашел мало полезной информации, но не для успеха. Ниже мой вопрос:Как отношение «один-к-нулю», так и «один-ко-многим» в Entity Framework 5

У меня есть классы ниже, и мне нужен способ указать отношение в модели сущности.

public class User 
{ 
    [Key] 
    public int UserId { get; set; } 
    public int? HomeAddressId { get; set; } 

    public virtual ICollection<Address> Addresses { get; set; } 
    public virtual Address HomeAddress{ get; set; } 
} 
public class Address 
{ 
    [Key] 
    public int AddressId { get; set; } 
    public int UserId { get; set; } 
    public string AddressLine1 { get; set; } 

    // other properties 
    public virtual User User { get; set; } 
} 

Требование каждого пользователя имеет много адресов, и каждый адрес связан с одним пользователем (один ко многим). Один из адресов - Домашний адрес, и, следовательно, у пользователя есть HomeAddres (необязательно). HomeAddressId - это FK (nullable) для таблицы Address. Как определить это отношение в коде модели сущности сначала предпочтительно в методе Fluent API?

+0

если вы скопировали свой код и вставьте здесь. У вас неправильное определение Пользовательский пользователь Адрес. Я изменил это. , и этот код должен работать. Кроме того, вы можете изменить свою модель. Адреса собирают все адреса. вы можете разделить адрес по типу как член AddresType адреса. –

ответ

0

Я предпочитаю показывать код простым способом.

public class User 
    { 
     [Key] 
     public int UserId { get; set; } 
     public int? HomeAddressId { get; set; } 

     public virtual ICollection<Address> Addresses { get; set; } 
     public Address HomeAddress { 
      get { 
       if(Addresses != null) 
        return Addresses.FirstOrDefault(p=> p.AddressType.Home); 
       return null; 
      } 
     } 
    } 
    public enum AddressType 
    { 
     Unknown, 
     Home, 
     Office 
    } 
public class Address 
{ 
    [Key] 
    public int AddressId { get; set; } 
    public int UserId { get; set; } 
    public string AddressLine1 { get; set; } 
    public AddressType AddressType {get; set; } 

    // other properties 
    public virtual User User { get; set; } 
} 

Второй свободный.

public class User 
{ 
    public int UserId { get; set; } 
    public virtual Address HomeAddress { get; set; } 
    public virtual int? HomeAddressId { get; set; } 
    public virtual ICollection<Address> OfficeAddresses { get; set; } 
} 

public class Address 
{ 
    public int AddressId { get; set; } 
    public string AddressLine1 { get; set; } 
} 

public class UserMap : MapEntityTypeConfiguration<User> 
{ 
    public UserMap() 
    { 
     //Other definitions PK etc... 

     this.HasOptional(o => o.HomeAddress) 
       .WithMany() 
       .HasForeignKey(a => a.HomeAddressId); 

     this.HasMany(t => t.OfficeAddresses) 
      .WithMany() 
      .Map(m => 
      { 
       m.ToTable("UserOfficeAddresses"); 
       m.MapLeftKey("AddressId"); 
       m.MapRightKey("UserId"); 
      }); 
    } 
} 
//and define Address Configurations.. MapEntityTypeConfiguration<Address> 
+0

возможно, это разрешит вопрос, но не по моему подходу, я не хочу добавлять дополнительное поле AddressType в адрес здесь. Вопрос состоит в том, чтобы иметь объект HomeAddressId для пользователя и использовать его. –

+0

я вижу. это просто простое и простое решение. другие действующие лица, вы должны использовать свободно api для определения отношений. Я попытаюсь ответить. ;) –

+0

второй, что вы просите. –

Смежные вопросы