实体框架,并向查找表添加引用/条目

本文关键字:添加 引用 条目 查找 框架 实体 | 更新日期: 2023-09-27 18:19:42

我有一个项目,我使用查找表将两个表链接在一起:

Day         WeatherLookUp       Weather
---         -------------       -------    
ID (PK) --> DayID            |- ID (PK)
            WeatherID    <---|  Description

这使我可以指定一天的多种天气条件。

我可以毫无问题地阅读这篇文章,但我的问题是,当我在日期表和天气表之间插入链接时。我创建了WeatherLookup表的两列作为该表的复合主键,因此EF不允许我直接插入WeatherLookout表。

我原以为我只需要添加这样一个天气条目:

myDay.Weather.Add(new Weather { ID = 2 } );

但EF认为我正在尝试添加一种新的天气类型。

我确信我遗漏了一些明显的东西,但我不知道是什么,我需要以某种方式使用Attach()吗?

实体框架,并向查找表添加引用/条目

您需要将Weather实体附加到上下文,以便告诉EF它已经存在于数据库中,不需要插入:

var weather = new Weather { ID = 2 };
context.Weather.Attach(weather);
myDay.Weather.Add(weather);

或者,您可以从数据库加载实体(这将隐式地将其附加到上下文):

var weather = context.Weather.Find(2);
myDay.Weather.Add(weather);

您需要将"Weather"与"WeatherLookUp"关联起来,而不仅仅是使用ID。

像这样的东西:

Weather weather = new Weather();
weather.Description = "hi";

WeatherLookUp lookup = new WeatherLookUp ();
lookup.Weather = weather;
myDay.Weather.add(Weather);
myDay.WeatherLookUp.add(lookup);
myDay.SaveChanges();