Entity framework 首先是实体框架代码中的复合主键问题

Entity framework 首先是实体框架代码中的复合主键问题,entity-framework,composite-primary-key,Entity Framework,Composite Primary Key,首先,我在实体框架代码中遇到了一个问题,数据库中有三个表,如下所示: CREATE TABLE [Food]( PK [FoodId] [int] NOT NULL, [FoodName] [varchar](50) NULL) CREATE TABLE [Fruit]( PK [FruitId] [int] NOT NULL, [FruitName] [varchar](50) NULL) CREATE TABLE [FoodFruit]( PK, FK [FoodId] [int] NO

首先,我在实体框架代码中遇到了一个问题,数据库中有三个表,如下所示:

CREATE TABLE [Food](
PK [FoodId] [int] NOT NULL,
[FoodName] [varchar](50) NULL)

CREATE TABLE [Fruit](
PK [FruitId] [int] NOT NULL,
[FruitName] [varchar](50) NULL)

CREATE TABLE [FoodFruit](
PK, FK [FoodId] [int] NOT NULL,
PK, FK [FruitId] [int] NOT NULL)
该模型将只生成食物、水果实体

但如果我向FoodFruit表添加一个新列[Notes],例如Notes:

CREATE TABLE [FoodFruit](
PK, FK [FoodId] [int] NOT NULL,
PK, FK [FruitId] [int] NOT NULL,
[Notes] [varchar](50) NULL)
该模型将生成食品、水果和食品水果实体


所以,我很困惑,为什么第一个不生成FoodFruit实体。

这是正确的行为。在第一种情况下,FoodFruit表只是建模多对多关系的数据库助手。EF在概念模型中不需要这样的助手,所以它将该表隐藏在直接建模的多对多关系后面。在第二种情况下,表有额外的数据-它成为完整的实体,而不仅仅是关系的连接表。EF检测到它并将其映射为新类。

感谢您的回复。我还有一个问题。在第一种情况下,如果我想向FoodFruit表插入或更新数据,但结果发现FoodFruit的实体不存在,我该怎么办?食品和水果应该具有导航属性-相关实体的集合,您只需将项目添加到该集合中。是的,感谢您的帮助。