我试图优化网站的效果,所以我跟着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)]
答案 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应该是实体。不是你自己定义的类。