Mám projekt, kde používam vyhľadávací stôl na spojenie dvoch tabuliek dohromady:
Day WeatherLookUp Weather
--- ------------- -------
ID (PK) --> DayID |- ID (PK)
WeatherID <---| Description
To umožňuje určiť viaceré poveternostné podmienky na jeden deň.
Z toho môžem čítať bez problémov, ale s mojimiproblém je, keď prídem na vloženie prepojenia medzi tabuľkou Deň a Počasie. Vytvoril som dva stĺpce tabuľky WeatherLookup ako zložený primárny kľúč tabuľky a ako výsledok EF mi neumožňuje urobiť priamu vloženie do tabuľky WeatherLookup.
Myslel som, že som potreboval pridať záznam o počasí takhle:
myDay.Weather.Add(new Weather { ID = 2 } );
... ale EF si myslí, že sa snažím pridať nový typ počasia.
Som si istý, že mi chýba niečo jasné, ale nemôžem vyriešiť, čo musím použiť Attach()
nejakým spôsobom?
odpovede:
4 pre odpoveď č. 1Musíte pripojiť Weather
subjektu do kontextu, aby EF povedal, že už existuje v databáze a nie je potrebné ho vložiť:
var weather = new Weather { ID = 2 };
context.Weather.Attach(weather);
myDay.Weather.Add(weather);
Prípadne môžete načítať entitu z databázy (ktorá sa implicitne pripojí k kontextu):
var weather = context.Weather.Find(2);
myDay.Weather.Add(weather);
0 pre odpoveď č. 2
Počas WeatherLookUp musíte "Weather" pomôcť nielen pomocou ID.
niečo také:
Weather weather = new Weather();
weather.Description = "hi";
WeatherLookUp lookup = new WeatherLookUp ();
lookup.Weather = weather;
myDay.Weather.add(Weather);
myDay.WeatherLookUp.add(lookup);
myDay.SaveChanges();