我有3张桌子
Brands:
BrandID int
BrandName varchar(30)
Products
ProdID int
ProdName varchar(30)
BrandToProd:
BrandID int => FK Brands.BrandID
ProdID int => FK Products.ProdID
从现有数据库生成模型后,EF省略了BrandToProd表,并在品牌和产品之间创建了多对多关系。我想拥有以下领域的第三个实体:
BrandName varchar(30)
ProductsName varchar(30)
这将使我有可能为这个实体使用脚手架。理想情况下,当我添加新的品牌和产品时,EF应首先检查数据库中是否存在此类品牌或产品(以避免重复),如果不存在,则添加到相应的表并添加映射到BrandToProd表。如果已存在品牌或产品,则在添加到BrandToProd表时,EF应该是否存在BrandID / ProdID值。有什么想法怎么做?
答案 0 :(得分:2)
您的BrandToProd
表是纯联结表,即只有两个外键的表。这是一个EF功能,可以将这些表建模为多个关联,而不需要概念模型中的类。
将纯联结表作为实体类包含在模型中的最简单方法是
另一种方法是手动编辑edmx,但是你真的需要知道你在做什么。如果您不想重新生成模型,则可以生成第二个模型,并通过差异查看器调查两个edmx文件的差异。
然而,我想知道你是否需要这样做。您似乎将此与重复检查相关联。但是,如果要向数据库添加Brand
或Product
,则必须以任一方式检查重复项。如果要添加新关联(例如,将现有品牌添加到Product.Brands),则无需检查其是否存在。如果是这样,EF就会忽略“新”关联。
答案 1 :(得分:1)
作为格特回答的额外观点: 使用代理键时,始终存在重复管理的问题。通常,有一个或多个字段构成逻辑密钥。 你可以
答案 2 :(得分:0)
我最终只是在我的联结表中添加了虚拟ID字段,因为我经常更改数据库模式(因为网站开发正在进行中,我需要不时地从数据库更新模型)而不是希望每次删除/添加虚拟字段到数据库。我使用的另一个选项 - 两个表上的SQL View和映射到EF中相应操作(CRUD)的存储过程