0

使用微軟的Entity Framework(v3.5)設計器,我創建了一個實體模型(* .edmx),並生成了* .Designer .cs類。我可以使用該模型將我的對象堅持到MS SQL Server,而不會出現任何問題。使用實體框架(v3.5)中的實體與流暢的NHibernate模型


我是新來的NHibernate,並出於好奇,現在我想用我的模型與功能NHibernate和SQLite數據庫。我已閱讀Auto mapping article on the Fluent NHibernate wiki。我確實改編了Examples.FirstAutomappedProject並且改編了ExampleAutomappingConfiguration來映射我的實體。 (我只用ShouldMapIsId覆蓋)。我的實體相當簡單,並且不包含模型中對方的明確引用。
現在,當我建立的會話工廠,我得到以下異常:

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 
    { 
     //... 
    } 
    //... 
} 

正如你看到的,我的實體類重裝飾(按課程的使用設計師)與屬性,可能是指這種類型。 這會導致這些麻煩嗎?

+0

您是否嘗試過用流利的映射,而不是自動映射?你應該能夠選擇你做什麼,不想做地圖。 – 2010-09-03 13:18:45

回答

1

問題可能是您的實體是從EntityObject繼承的。 EntityObject聲明兩個公共屬性:EntityKey和EntityState。 EntityKey的類型是EntityKey,它的處理類似於你沒有提供給NHibernate的類。我認爲除非你使用沒有從EntityObject繼承的EF 4.0和POCO,否則你將無法做到這一點。

+0

謝謝。我已經能夠驗證與EntityKey的關聯。到目前爲止,這確實阻止我使用這些實體。由於實體確實來自一個真實的項目,所以我不能僅僅因爲我對NHibernate的「好奇心」而改變它。而EF4.0僅僅是CTP。 – Marcel 2010-09-03 13:40:24

+2

否EF 4.0不在CTP中。 EF 4.0是已經發布的.NET 4.0的一部分。 – 2010-09-03 13:43:43

+0

你是對的,我在編寫評論時,腦海裏已經有了Code First Approach。 – Marcel 2010-09-03 14:28:09

1

首先使用數據庫EntityFramework代碼生成嚮導將生成與EntityFramework緊密耦合的模型類,並且不容易與NHibernate一起使用。爲了讓事情變得更糟,EntityFramework 3.5並不真正支持將(可能)與NHibernate一起工作的POCO對象。 EF 4.0有更好的POCO支持,但最終我不確定它會如你所願地工作。

我會扔掉EntityFramework模型類,並重新開始,如果你真的想與流利NHibernate的工作。

以下是有關NHibernate的模型類代碼生成一些問題:

NHibernate Generators what is the best code generator for NHibernate?

+0

感謝您的回答。這很令人傷心,但目前我無法更改模型,因爲它來自正在使用的生產代碼。後來,當從存儲中取回實體時,我想將它們反饋回實際的應用程序而不是某些測試版本。 – Marcel 2010-09-03 13:42:32

+0

@Marcel:我不明白你爲什麼認爲你需要在NHibernate下面使用你的EF模型類。您可以在NH可用的EF之上放置另一層POCO模型類。或者您可以創建第二組模型類,這些類是與NHibernate一起工作的EF模型類的對等體。無論如何,如果你最終想要擺脫EF 3.5,你可能需要這樣做。在任何情況下,模型類都應該像系統中的其他軟件一樣靈活,並且說它們被設置在石頭上讓我質疑您工作的地方的政策。祝你好運。 – 2010-09-04 11:07:09