实体框架:关系错误

时间:2013-02-28 06:03:56

标签: asp.net entity-framework

我试图优化网站的效果,所以我跟着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 个答案:

答案 0 :(得分: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.String     此实体参与的关联的名称空间的名称。

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应该是实体。不是你自己定义的类。