8
是否可以在实体框架4.1(代码优先方法)中仅使用数据注释而不使用模型构建器来定义多对多关系?实体框架4.1代码优先 - 仅使用数据注释定义多对多
例如,像:
Product = { Id, Name, ... }
Category = { Id, Name, ... }
ProductCategory = { ProductId, CategoryId }
你得到的图片。
我不希望在两个多对一的上下文中有一个中间实体ProductCategory
,因为我没有任何附加数据,只有两个FK。另外,我应该能够为中间表定义表名,以便与现有数据库一起使用。
谢谢,我按你的建议做了,但它仍然不起作用。出于某种原因,我得到一个异常'无效的列名'Category_Id'。\ r \ n当我尝试评估'product.Categories'时,无效的列名'Product_Id'.'。这只是使用约定,即没有注释或流利的API。我的数据库表'ProductsCategories'有'ProductId'和'CategoryId',两者之间没有下划线。为什么是下划线?它没有记录在任何地方作为公约AFAIK。对于1-M和M-1关系,EF4.1不需要下划线(至少它没有记录)。 – 2011-06-08 21:09:43
Product_Id和Category_Id是默认名称。如果您有现有数据库并且名称不同,则必须使用模型构建器将关系正确映射到您自己的表。 – 2011-06-08 21:47:34
你说得对。但是,在其他使用1-M关系的地方,它预计FK字段*不带*下划线(即'ProductId')。这是没有意义的**。实际上,这意味着如果稍后向ProductCategories中间表添加另一个字段(例如“Ord”),它将成为一个真正的实体,然后该公约会抱怨找不到字段“ProductId”。 – 2011-06-08 22:19:51