2014-10-08 2 views
0

У меня есть 3 таблицы:Добавление новых дочерних записей в родительской таблице в рамках сущности 6

счета: Id, Name

Пользователь: Id, AccountId, имя

UserDetail : Id, UserId, Телефон

Объекты:

public partial class Account 
{ 
    public Account() 
    { 
     this.Users = new HashSet<User>(); 
    } 

    public int Id{get;set;} 
    public string Name{get;set;} 
    public virtual ICollection<User> Users{get;set;} 
} 

public partial class UserDetail 
{ 
    public int Id{get;set;} 
    public string Phone {get;set;} 
    public virual User User {get;set;} 
} 

public partial class User 
{ 
    public User() 
    { 
     this.Accounts = new HashSet<Account>(); 
    } 

    public int Id{get;set;} 
    public virtual ICollection<Account> Accounts {get;set;} 
    public virtual UserDetail UserDetail{get;set;} 
} 

Как вы можете видеть, учетная запись для пользователя является отношением друг к другу, так что у моей учетной записи есть пользователи DbSet. В то время как User to UserDetail является взаимно-однозначным отношением.

В настоящее время я пытаюсь вставить запись пользователя и пользователя в существующую учетную запись. Так что мой код выглядит следующим образом:

var newUserDetail = new UserDetail(); 
newUserDetail.Phone = 014109842; 

var newUser = new User(); 
newUser.Name = "John Smith"; 
newUser.UserDetail = newUserDetail; 

var currentAccount = _dbContext.Accounts.First(a => a.Id == 100); 
currentAccount.User.Add(newUser); 
_dbContext.SaveChanges(); 

Я получаю следующее сообщение об ошибке: «Зависимое свойство в ReferentialConstraint отображается в магазине-генерируемый столбец Колонка:.„Id“.»

Мысли?

+0

Если вы предоставите определения своего класса для учетной записи, пользователя и UserDetail, вы получите дополнительную помощь. –

+0

@EtihwSirhc Я сделал сейчас – amythn04

ответ

1

Зависимое свойство в ссылочной привязке сопоставляется с созданным магазином столбцом. Колонка: «Id»

Я исследовал эту ошибку более подробно и наткнулся на этот пост: A dependent property in a ReferentialConstraint is mapped to a store-generated column

В основном, это говорит о том, что UserDetail.Id (который зависит свойство) имеет реляционное ограничение, а также является созданный магазином столбец, т.е. автоинкремент.

Решение заключалось в том, чтобы либо удалить свойство автоинкремента, либо добавить другой FK для любого пользователя в UserDetail или UserDetail для пользователя.

Извлеченные уроки: 1. Определенно имеют столбцы идентификации с именем класса/таблицы. Например, если вы можете, назовите столбец вашей личности (PK) с именем таблицы в качестве prepend. Поэтому в моем вопросе я должен переименовать все столбцы Id в AccountId, UserId, UserDetailId.

Почему?

Непредвиденное, что EF было бы дать мне очевидный ключ, чтобы посмотреть на отображение на UserDetailId. Без этого я все время задавался вопросом, какое картографирование было проблематичным.

0

Попробуйте это.

var newUserDetail = new UserDetail(); 
newUserDetail.Phone = 014109842; 
_dbContext.UserDetail.Add(newUserDetail); 

var newUser = new User(); 
newUser.Name = "John Smith"; 
_dbContext.User.Add(newUser); 

_dbContext.saveChanges(); // save changes so the db can generate ID's 

newUser.UserDetail = newUserDetail; 

var currentAccount = _dbContext.Accounts.First(a => a.Id == 100); 
currentAccount.User.Add(newUser); 
_dbContext.SaveChanges(); 
+0

Я должен был упомянуть, что это первая модель EF, извините! Я не могу вносить изменения в модель. Таблица учетных записей не имеет внешнего ключа для таблицы пользователя. Таблица пользователя имеет учетную запись AccountId, сопоставленную с таблицей Id of Account. Генератор модели EF создал сопоставления. – amythn04

+0

Правильно, вот что я понимаю, потому что не спрашиваю. Обновлен мой ответ. –

+0

Эта мысль перешла мне в голову, но мне было интересно, могу ли я уйти, не используя другой класс UserService в контроллере учетной записи (если вы знаете, что я имею в виду). Кроме того, я использую шаблон работы, который сломается, если я это сделаю. – amythn04

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

  • Нет связанных вопросов^_^