У меня проблема с отображением в Entity Framework.Как сопоставить тип значения, который имеет ссылку на объект?
У меня есть следующие классы (упрощенные):
public class Building
{
public int ID { get; set; }
// *.. snip..* other properties
public Location Location { get; private set; }
}
public class Location
{
public string Street {get; set;}
public Country country {get; set}
}
public class Country
{
public int ID { get; set; }
public string Name { get; set; }
}
Строительство и страны являются юридическими лицами, они сохраняются в базе данных. Расположение - это тип значения и должен отображаться в той же таблице, что и «Строительство».
Однако, когда я сопоставляю его таким образом, инфраструктура сущности также хочет сопоставить местоположение с таблицей и жалуется, что у нее нет ключа. Я не хочу давать ему ключ, поскольку он принадлежит зданию и не должен быть сущностью вообще.
Я видел обходные пути, которые говорят, что вам нужно поместить страну в класс здания, но это просто не очень хорошо (и семантически просто неправильно).
Я использую Entity Framework 5
Вы ищете [сложные типы] (http://weblogs.asp.net/manavi/archive/2011/03/28/associations-in-ef-4-1-code-first -part-2 -комплекс-types.aspx). –
Да, я знаю, проблема в том, что как только этот сложный тип имеет ссылку на сущность, EF также хочет поставить сложный тип в таблицу – Kenneth
Какой хороший вопрос. Фактически, я обычно фокусируюсь на логике домена, и мне все равно, как ORM сохраняет данные (поэтому я бы не стал добавлять столбец Id в Location в качестве большой проблемы). Если мне действительно нужно заботиться о том, как хранятся данные, я бы подумал о том, чтобы не смешивать объекты домена с объектами ORM, создавая определенный уровень для сохранения (создание объектов для посещения ORM), хотя это может усложнить процесс архитекторизации. Если вы пришли к выводу, сообщите нам, возможно, CQRS разрешит это. – Alisson