2013-03-03 5 views
1

У меня есть следующие модели сущностей. Когда я пытаюсь сохранить новый объект User, который содержит новую учетную запись, он выдает исключение DBUpdateException: произошла ошибка при сохранении объектов, которые не отображают свойства внешнего ключа для своих отношений.Управление сложными типами в Entity Framework?

Возможно ли обеспечить отображение для двух объектов без добавления внешних ключей к моей модели. Я ненавижу идею наличия внешних ключей в моделях. Если нет другого решения, как решить эту проблему с помощью внешних ключей?

public class User 
{ 
    public virtual int Id { get; set; } 
    public virtual Account Account { get; set; } 
} 

public class Account 
{ 
    public virtual int Id { get; set; } 
} 
+1

Я не думаю, что это возможно в EF, свойства навигации сильно привязаны к FK. CF моя статья о свойствах навигации здесь для того, как это сделать WITH FKs http://blog.staticvoid.co.nz/2012/7/17/entity_framework-navigation_property_basics_with_code_first –

+0

@LukeMcGregor Как настроить внешние ключи? Что такое соглашения об именах? Где хранится сгенерированная база данных? Я хочу знать, как он создает таблицы и отношения. – aryaxt

+0

Посмотрите мою статью, я вхожу во все эти вопросы (кроме, может быть, где ее хранится, которая находится в местоположении, определенном вашей строкой подключения?), Это то, что вы имеете в виду?) –

ответ

2

Являются ли эти классы действительно «сложными типами» или являются обеими сущностями со своей соответствующей таблицей?

Если они являются объектами, вы действительно можете настроить EF, чтобы не требовать свойств внешнего ключа в самих классах. В своем классе DbContext, переопределить OnModelCreating и добавить некоторые конфигурации кода, как это:

modelBuilder.Entity<User>().HasRequired(u => u.Account).WithRequiredPrincipal(); 

Если я получил это право, что настроит «требуется: требуется» отношения между Пользователем и счета без необходимости каких-либо внешних ключей свойств на любом классе.

+0

Это было бы для меня, потому что я только начал приложение, и я не создал никаких таблиц. Таблицы автоматически генерируются Entity. Лучше ли иметь несколько объектов? или сложный тип? в чем разница? Спасибо – aryaxt

+0

Сложный тип поместит свойства этого класса в одну и ту же таблицу. Поэтому любые свойства, добавленные в «Учетную запись», например, попадут в таблицу «Пользователи». Это удобно для таких вещей, как адреса, где вы можете обернуть имя улицы, город, почтовый индекс и т. Д. В класс, но не иметь эти свойства, разделенные на отдельную таблицу. –

+0

Не будет ли это неправильным выбором и вызовет проблему производительности на больших наборах данных? Какой из них является предпочтительным? – aryaxt

1

Вы должны удалить свойство Id из вашего класса Account иначе Entity Framework будет относиться к классу Account как единое целое, а не как сложный тип.

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