2013-05-08 4 views
3

У меня проблема с пониманием сложных типов данных и сущностей в ASP MVC и C#. Я начал с создания следующего типа, который не предназначен для объекта (DB таблицу):Модели/объекты против сложных типов

public class Period : IPeriod 
{ 
    public DateTime From { get; set; } 
    public DateTime To { get; set; } 
} 

Я добавил этот тип модели:

public class Event 
{ 
    public int ID { get; set; } 
    public string Title { get; set; } 
    public Period EventTime { get; set; } 
} 

Это работало отлично. Казалось, он понимает, что Период является сложным типом, но не сущностью. Он просто добавил столбцы EventTime_From и EventTime_To в таблицу Event.

Однако, я добавил некоторую сложность к типу Period, удалив интерфейс, переместив класс в другое пространство имен и добавив методы в класс. Внезапно, когда вы пытались перестроить базу данных, она неожиданно интерпретировалась как тип сущности, тем самым бросая исключение для отсутствия первичного ключа.

Какая система? Когда классы рассматриваются как сложные типы и когда они рассматриваются как сущности?

+0

Вместо того, чтобы изменять период, попробовали ли вы создать дочерний класс Периода с реализацией или сделать период неполным классом и поставить реализацию в другом частичном месте где-нибудь еще? – qJake

+0

Я, конечно, не знаю, что происходит за кулисами с генератором модели Entity, хотя у меня есть некоторый опыт с подобными проблемами. В моделях есть файлы ресурсов, в которых они определяют сопоставление объектов с таблицами. Автоматический генератор модели сделал неправильный вывод (он пытается сопоставить Period с некоторой таблицей или создать ее, если она не существует), которую вам придется исправлять вручную в одном из файлов ресурсов. – evanmcdonnal

ответ

2

Трудно сказать, что именно происходит, не зная, все изменения, которые вы сделали, но вы всегда можете сказать EF явно что Period представляет собой сложный тип либо пометив его с ComplexType атрибута или с помощью свободно картирование:

modelBuilder.ComplexType<Period>(); 
+0

Ах. Отлично. Только то, что мне было нужно. Спасибо. –

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