2016-08-31 3 views
0

Если у меня есть пользовательEntity Framework только с одним концом подключен

public class User : BaseEntity 
{ 
    public int Id { get; set; } 
    public AddressId {get;set;} 
    public Address Address {get; set;} 
} 

И класс Адрес

public class Address : BaseEntity 
{ 
    public int Id { get; set; } 
} 

Таким образом, только это один к одному только пользователь, имеющий подключение к другой конец.

Как настроить это с помощью свободного API, а также возможно, чтобы мой общий метод SaveOrUpdate учитывал сохранение графиков за один раз?

public static async Task<T> SaveOrUpdateAsync<T>(this GSCMContext context, T updated) where T : BaseEntity 
    { 
     if (updated == null) 
      return null; 

     if (updated.IsPersisted) 
     { 
      T existing = context.Set<T>().Find(updated.Id); 
      if (existing != null) 
      { 
       context.Entry(existing).CurrentValues.SetValues(updated); 
       await context.SaveChangesAsync(); 
      } 

      return existing; 
     } 

     context.Set<T>().Add(updated); 
     await context.SaveChangesAsync(); 
     return updated; 
    } 

ответ

0

Есть два способа, которые я могу рекомендовать, чтобы настроить один-к-одному отношения:

ModelBuilder.Entity<User>().HasOptional(u => u.Address).WithOptionalPrincipal(); 

Здесь Адрес будет иметь свой собственный столбец идентичности, и столбец user_id с FK для пользователя.

ModelBuilder.Entity<User>().HasOptional(u => u.Address).WithOptionalDependent(); 

Здесь Адрес будет иметь свой собственный столбец Удостоверение и пользователь будет иметь столбец Address_Id с FK на адрес.

Если вы хотите сказать EF, что он должен заполнить AddressId в модели пользователя, вы должны настроить отношения как один-ко-многим:

ModelBuilder.Entity<User>().HasOptional(u => u.Address).WithMany().HasForeignKey(u => u.AddressId); 

Это имеет тот недостаток, что вы должны реализовать чтобы обеспечить соответствие не более одного адреса каждому пользователю.

Обратите внимание, что при необходимости конфигурирование взаимно-однозначного отношения приведет к повторному использованию ИД основного объекта для зависимого объекта, т. Е. В таблице зависимого объекта не будет дополнительного столбца FK.

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