Использование сущностей из модели Entity Framework (v3.5) с Fluent NHibernate - PullRequest
0 голосов
/ 03 сентября 2010

Используя конструктор Microsoft для Entity Framework (v3.5), я создал модель Entity (* .edmx) с созданным классом * .Designer.cs.Я могу без проблем сохранять свои объекты в MS SQL Server, используя модель.


Я новичок в NHibernate и из любопытства Теперь я хотел бы использовать мою модель с Fluent NHibernate и SQLite в качестве базы данных.Я прочитал статью Auto mapping на Fluent NHibernate wiki .Я адаптировал Examples.FirstAutomappedProject и адаптировал ExampleAutomappingConfiguration для отображения своих сущностей.(Я использовал только переопределения ShouldMap и IsId).Мои сущности довольно просты и не содержат явных ссылок друг на друга в модели.
Теперь, когда я создаю Session Factory, я получаю следующее исключение:

An invalid or incomplete configuration was used while creating a SessionFactory. Check PotentialReasons collection, and InnerException for more detail.

с внутренним исключением с сообщением

An association from the table XXX refers to an unmapped class: System.Data.EntityKey

Нетсвойства моих сущностей имеют тип System.Data.EntityKey.

[global::System.Data.Objects.DataClasses.EdmEntityTypeAttribute(NamespaceName="MyStorageModel", Name="XXX")]
[global::System.Runtime.Serialization.DataContractAttribute(IsReference=true)]
[global::System.Serializable()]
public partial class XXX: global::System.Data.Objects.DataClasses.EntityObject
{
  //...
     [global::System.Data.Objects.DataClasses.EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)]
     [global::System.Runtime.Serialization.DataMemberAttribute()]
     public global::System.Guid XXXID
     {
        //...
     }
  //...
}

Как вы видите, мои классы сущностей сильно украшены (конечно, использованным дизайнером) с атрибутами, которые, вероятно, относятся к этому типу. Может ли это вызвать эти проблемы?

Ответы [ 2 ]

1 голос
/ 03 сентября 2010

При первом использовании базы данных мастер генерации кода EntityFramework создаст классы моделей, которые тесно связаны с EntityFramework и которые нельзя легко использовать с NHibernate.

Что еще хуже, EntityFramework 3.5 на самом деле не поддерживает объекты POCO, которые (вероятно) будут работать с NHibernate. EF 4.0 имеет гораздо лучшую поддержку POCO, но в конечном итоге я не уверен, что она будет работать так, как вы хотите.

Я бы отбросил классы модели EntityFramework и начал бы заново, если вы действительно хотите работать с Fluent NHibernate.

Вот несколько вопросов, связанных с генерацией кода класса модели NHibernate:

Генераторы NHibernate Какой генератор кода является лучшим для NHibernate?

1 голос
/ 03 сентября 2010

Возможно, проблема в том, что ваша сущность унаследована от EntityObject. EntityObject объявляет два открытых свойства: EntityKey и EntityState. EntityKey имеет тип EntityKey и обрабатывается как ассоциация с классом, который вы не предоставили NHibernate. Я думаю, что вы не сможете сделать это, если вы не используете EF 4.0 и POCO, которые не наследуются от EntityObject.

...