2013-02-28 68 views
1

我試圖優化性能爲我的網站,所以我也跟着these rules 同時做關於生成的編譯時間點意見我不得不創建.edmx文件,創建該文件後,並遵守所有的步驟我面對這個問題:實體框架:關係錯誤

Schema specified is not valid. Errors: 
The property for the relationship 'FK_dbo_X_dbo_Y_x_id' contains a Role 'X' has a type 'Site.Models.X' that is not valid for a relationship End. Change the End Role to an EntityType. 

我有每一個關係。

誰能告訴我我該如何解決這個錯誤?

更新:

我如何定義我的關係

模型:

[ForeignKey("foreign_id")] 
    public EntityCollection<MyClass> relation_obj { get; set; } 
中的DbContext

modelBuilder.Entity<X>().HasMany(m => m.relation_obj); 

的關係總成:

[assembly: EdmRelationshipAttribute("DBModel", "FK_dbo_X_dbo_Y_x_id", "X", System.Data.Metadata.Edm.RelationshipMultiplicity.One, typeof(Site.Models.X), "Y", System.Data.Metadata.Edm.RelationshipMultiplicity.Many, typeof(Site.Models.Y), true)] 
+1

你能顯示代碼的優化? – 2013-02-28 06:06:40

+0

我添加了一個新的'edmx'文件,使其自動爲每個創建的新車型我有,所以我刪除了模型,並修改設計器和程序集引用使用舊的模型,如下所示:'[assembly:EdmRelationshipAttribute(「DBModel」,「FK_dbo_X_dbo_Y_restaurant_id」,「X」,System.Data.Metadata。 Ed.RelationshipMultiplicity.One,typeof(Site.Models.X),「Y」,System.Data.Metadata.Edm.RelationshipMultiplicity.Many,typeof(RestaurantApp.Models.Y),true)]'並添加了預構建腳本就像他們在這裏說的:'http:// msdn.microsoft.com/en-us/library/bb896240.aspx' – Hilmi 2013-02-28 06:12:46

+0

@KirillBestemyanov先生如果您需要任何其他信息的和平請告訴我,您的幫助將非常感激! – Hilmi 2013-02-28 06:32:31

回答

1

你的問題是你定義爲導航屬性類沒有映射到數據庫(你自己定義的類)。不要這樣做。實體框架不能使用這種導航屬性。您可以閱讀更多關於導航屬性here

問題是在這裏:

[assembly: EdmRelationshipAttribute("DBModel", "FK_dbo_X_dbo_Y_x_id", "X", System.Data.Metadata.Edm.RelationshipMultiplicity.One, typeof(Site.Models.X), "Y", System.Data.Metadata.Edm.RelationshipMultiplicity.Many, typeof(Site.Models.Y), true)] 

從MSDN:

public EdmRelationshipAttribute(
    string relationshipNamespaceName, 
    string relationshipName, 
    string role1Name, 
    RelationshipMultiplicity role1Multiplicity, 
    Type role1Type, 
    string role2Name, 
    RelationshipMultiplicity role2Multiplicity, 
    Type role2Type 
) 

參數

relationshipNamespaceName 類型:System 命名空間的名稱協會這個實體參與。

relationshipName 類型:System.String 此實體參與的關係的名稱。

role1Name 類型:System.String 關聯一端的類型的角色名稱。

role1Multiplicity 類型:System.Data.Metadata.Edm.RelationshipMultiplicity RelationshipMultiplicity的值,表示在關聯的一端的多樣性,諸如一個或多個。

role1Type 類型:System.Type 在關聯的一端的類型實體的。

role2Name 類型:System.String 關聯另一端類型的角色名稱。

role2Multiplicity 類型:System.Data.Metadata.Edm.RelationshipMultiplicity RelationshipMultiplicity的值,表示在關聯的另一端的多樣性,諸如一個或多個。

role2Type 類型:System.Type 在關聯的另一端的類型實體的。 「

所以role1Type和role2Type應該是實體的。不是你自己定義的類。

+0

先生,我認爲我沒有很好地表達您的觀點,我的導航員通過'DbContext'映射到數據庫,如下所示:'modelBuilder.Entity ( ).HasMany(m => m.relation_obj);'它以前是有效的。主席先生,我非常感謝你的幫助。非常感謝! – Hilmi 2013-02-28 10:27:44

+0

這是不是EF類的Site.Models.Y和Site.Models.X:[assembly:EdmRelationshipAttribute(「DBModel」,「FK_dbo_X_dbo_Y_x_id」,「X」,System.Data.Metadata.Edm.RelationshipMultiplicity.One,typeof (Site.Models.X),「Y」,System.Data.Metadata.Edm.RelationshipMultiplicity.Many,typeof(Site.Models.Y),true)] – 2013-02-28 12:54:59