Asp.net 实体框架:关系错误
我试图优化我的网站的性能,所以我跟随 在编译时生成视图时,我必须创建Asp.net 实体框架:关系错误,asp.net,entity-framework,Asp.net,Entity Framework,我试图优化我的网站的性能,所以我跟随 在编译时生成视图时,我必须创建.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. Chan
.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; }
您的问题是,您将未映射到数据库的类(您自己定义的类)定义为导航属性类。不要这样做。实体框架无法使用此类导航属性。您可以阅读有关导航属性的更多信息 问题在于:
[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:
"
参数
关系名称空间名称
类型:System.String
此实体参与的关联的命名空间的名称
关系名称
类型:System.String
此实体参与的关系的名称
角色名称
类型:System.String
关联一端类型的角色名称
角色1多重性
类型:System.Data.Metadata.Edm.RelationshipMultiplicity
RelationshipMultiplicity的值,指示关联一端的多重性,例如一个或多个
角色类型
类型:System.Type
关联一端的实体的类型
角色名称
类型:System.String
关联另一端类型的角色名称
角色2多重性
类型:System.Data.Metadata.Edm.RelationshipMultiplicity
RelationshipMultiplicity的值,指示关联另一端的多重性,如一个或多个
角色2类型
类型:System.Type
关联另一端的实体的类型。
"
所以role1Type和role2Type应该是实体。不是您自己定义的类。您的问题是,您将未映射到数据库的类(您自己定义的类)定义为导航属性类。不要这样做。实体框架无法使用此类导航属性。您可以阅读有关导航属性的更多信息 问题在于:
[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:
"
参数
关系名称空间名称
类型:System.String
此实体参与的关联的命名空间的名称
关系名称
类型:System.String
此实体参与的关系的名称
角色名称
类型:System.String
关联一端类型的角色名称
角色1多重性
类型:System.Data.Metadata.Edm.RelationshipMultiplicity
RelationshipMultiplicity的值,指示关联一端的多重性,例如一个或多个
角色类型
类型:System.Type
关联一端的实体的类型
角色名称
类型:System.String
关联另一端类型的角色名称
角色2多重性
类型:System.Data.Metadata.Edm.RelationshipMultiplicity
RelationshipMultiplicity的值,指示关联另一端的多重性,如一个或多个
角色2类型
类型:System.Type
关联另一端的实体的类型。
"
所以role1Type和role2Type应该是实体。不是你自己定义的类。你能用你的优化显示代码吗?我添加了一个新的
edmx
文件,这样它会自动为我拥有的每个表创建新的模型,所以我删除了模型并修改了设计器和程序集引用以使用旧模型,如下所示:[assembly:EdmRelationshipAttribute(“DBModel”,“FK_dbo_X_dbo_Y_restaurant_id”,“X”,System.Data.Metadata.Edm.RelationshipMultiplicity.One,typeof(Site.Models.X),“Y”,System.Data.Metadata.Edm.RelationshipMultiplicity.Many,typeof(restaurantap.Models.Y),true)]
并像他们在这里说的那样添加了预构建脚本:http://msdn.microsoft.com/en-us/library/bb896240.aspx
KirillBestemyanov先生如果您需要任何其他信息,请告诉我,我们将非常感谢您的帮助!是Site.Models.X和Site.Models.Y EntityFramework生成的类还是您定义的类?我自己的classes,我以前使用的旧模型您能用您的优化显示代码吗?我添加了一个新的edmx
文件,因此它会自动为我拥有的每个表创建新模型,因此我删除了模型并修改了设计器和程序集引用,以使用旧模型,如下所示:[assembly:edmrationshipAttribute(“DBModel”)FK_dbo_X_dbo_Y_restaurant_id”,“X”,System.Data.Metadata.Edm.RelationshipMultiplicity.One,typeof(Site.Models.X),“Y”,System.Data.Metadata.Edm.RelationshipMultiplicity.Many,typeof(restaurantap.Models.Y),true)]
并像他们在这里说的那样添加了预构建脚本:http://msdn.microsoft.com/en-us/library/bb896240.aspx
KirillBestemyanov先生如果您需要任何其他信息,请告诉我,我们将非常感谢您的帮助!是Site.Models.X和Site.Models.Y EntityFramework生成的类还是您定义的类?我自己的classes,我以前使用的旧模型先生,我想我没有很好地理解你的观点,我的导航器通过DbContext
映射到数据库,如下所示:modelBuilder.Entity().HasMany(m=>m.relation\u obj)
而且它以前就工作过。先生,我非常感谢您的帮助。非常感谢!这里是Site.Models.Y和Site.Models.X,它们不是EF类:[汇编:edmrationshipAttribute(“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)]先生,我想我没有收到您的poi
[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)]
public EdmRelationshipAttribute(
string relationshipNamespaceName,
string relationshipName,
string role1Name,
RelationshipMultiplicity role1Multiplicity,
Type role1Type,
string role2Name,
RelationshipMultiplicity role2Multiplicity,
Type role2Type
)