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

时间:2013-06-24 08:59:33

标签: c# entity-framework entity-framework-4 lookup

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

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

这允许我指定一天的多个天气条件。

我可以从中读取没有任何问题但我的问题是当我在Day和Weather表之间插入链接时。我创建了WeatherLookup表的两列作为表的复合主键,因此EF不允许我直接插入WeatherLookup表。

我以为我只需要添加这样的天气条目:

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

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

我确定我错过了一些显而易见的东西,但我无法解决问题,我是否需要以某种方式使用Attach()

2 个答案:

答案 0 :(得分:4)

您需要将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);

答案 1 :(得分:0)

您需要将“天气”与“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();