1

我试图优化我的网站的性能,所以我在执行关于在编译时生成视图的要点时遵循了这些规则 ,我必须创建.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)]
4

1 回答 1

1

您的问题是您定义为没有映射到数据库的导航属性类(您自己定义的类)。不要这样做。实体框架无法使用此类导航属性。您可以在此处阅读有关导航属性的更多信息。

问题在这里:

[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 一个表示关联一端的多重性的值,例如一个或多个。

role1Type 类型:System.Type关联一端的实体类型。

role2Name 类型:System.String 关联另一端类型的角色名称。

role2Multiplicity 类型:System.Data.Metadata.Edm.RelationshipMultiplicity 一个表示关联另一端的多重性的值,例如一个或多个。

role2Type 类型:System.Type关联另一端的实体类型。"

所以 role1Type 和 role2Type 应该是实体。不是您自己定义的类。

于 2013-02-28T09:13:27.667 回答