Lite svårt att testa utan att se hur dina modeller ser ut, men något i den här stilen bör fungera
var query = db.PersonFörsäkringSet
.Where(x => x.pFörsäkringId == i)
.Select(x => x.Försäkringstyp.FörsäkringGrundbelopp).First().Grundbelopp;
Första länken från SO förklarar varför du får detta error-meddelande.
https://stackoverflow.com/questions/7259567/linq-to-entities-...
Som ovan är inne på så är din query felskriven så EF inte förstår. Vad jag kan förstå av svaret på SO iaf.
Tack!! Jag fick fram ett värde på det sättet men tyvärr inte det värdet jag önskade, men ni verkar ha bra koll så ni kanske kan hjälpa mig med hur jag ska spara rätt objekt kopplat till försäkringen. Jag printscreenar en bild av min modell då vi kör EF model first, och sen hur jag skrivit koden för att ni ska förstå vad jag försöker göra så kanske ni vet varför det inte verkar fungera.
C:\Users\gusta\Desktop\modell.jpg
Använder winform så jag har kopplat en listbox till entiteten försäkringgrundbelopp, jag har kontrollerat och vet att den väljer rätt värde. När jag sedan försöker spara så vet jag inte om det fungerar.. som ni ser är det fler objekt jag försöker koppla(tillval och tillvalgrundbelopp) men får jag det att funka för försäkringgrundbelopp bör det ju gå att göra samma med de andra tänker jag.. såhär har jag gjort för att försöka koppla det försäkringgrunbeloppet jag valt till den nya försäkringen jag försöker skapa:
public void LäggtillPersonförsäkring(string LöpNr, string FörsäkNr, string Premie, DateTime AnkomstDatum, string Betalform, DateTime Förfalldag, int Betalningsår, int Betalningsmånad, int försäktyp, double eventuellprov, int Grundbelopp, string Till, int Grundtillval, int PersAnsId, int Pförsäktag)
{
using (var db = new Model1Container())
{
//skapar en ny personförsäkring
PersonFörsäkring personförsäkring = new PersonFörsäkring()
{
Löpnr = LöpNr,
Försäkringsnr = FörsäkNr,
Premie = Premie,
Ankomstdatum = AnkomstDatum,
Betalform = Betalform,
Förfallodag = Förfalldag,
Betalningsmånad = Betalningsmånad,
Betalningsår = Betalningsår,
EventuellProvision = eventuellprov
};
//hämtar försäkringstyp
var försäkty = from typ in db.FörsäkringstypSet
where typ.FörsäkringstypID == försäktyp
select typ;
//och sparar den för försäkringen
foreach (var B in försäkty)
{
Försäkringstyp ftyp;
ftyp = B;
personförsäkring.Försäkringstyp = B;
}
//hämtar ansökan
var persansökan = from item in db.PersonAnsökanSet
where item.PersAnsID == PersAnsId
select item;
//och sparar den för försäkringen
foreach (var item in persansökan)
{
PersonAnsökan p;
p = item;
personförsäkring.PersonAnsökan = item;
}
//hämtar grundbelopp(försäkringstyp)
var grundbelopp = from g in db.FörsäkringGrundbeloppSet
join r in db.FörsäkringstypSet on g.FörsäkringstypFörsäkringstypID equals r.FörsäkringstypID
where g.FörsäkringGrundID == Grundbelopp
select g;
//sparar den för försäkringen
foreach (var g in grundbelopp)
{
FörsäkringGrundbelopp grund;
grund = g;
personförsäkring.Försäkringstyp.FörsäkringGrundbelopp.ToList()[0] = g;
}
//hämtar tillval
var tillval = from t in db.TillvalSet
where t.Tillvalstyp == Till
select t;
//och sparar den för försäkringen
foreach (var t in tillval)
{
Tillval x;
x = t;
personförsäkring.Försäkringstyp.Tillval.ToList()[0] = t;
}
//hämtar grundbelopp för tillvalet
var grundbelopptillval = from y in db.TillvalGrundbeloppSet
where y.TillvalgrundID == Grundtillval
select y;
//och sparar den
foreach (var y in grundbelopptillval)
{
TillvalGrundbelopp u;
u = y;
personförsäkring.Försäkringstyp.Tillval.ToList()[0].TillvalGrundbelopp.ToList()[0] = y;
}
//lägger till den nya försäkringen till databasen
//och sparar den
db.PersonFörsäkringSet.Add(personförsäkring);
db.SaveChanges();
}
}
Din bild visas inte.
Lite oklart om vad du vill med all kod du postat ovan, är det något specifikt du undrar över eller något som inte fungerar som du tänkt?
Enklaste sättet att testa om det sparas är väl att steppa igenom via debuggern och se om du får det resultatet du önskar, sen kan du kolla i databasen.
Skulle också rekommendera dig att skriva tydligare variabler och helst på engelska eller åtminstone utan åäö. Ibland gör du väldigt onödiga förkortningar och tveksamma val på dina variabel namn:
where typ.FörsäkringstypID == försäktyp,
fick t.ex. kolla i dina inparamtertrar vad försäktyp är för något i detta fall. Bara ett tips för framtiden, för det är inte alltid du själv som ska arbeta med koden du skriver
foreach (var B in försäkty)
{
Försäkringstyp ftyp;
ftyp = B;
personförsäkring.Försäkringstyp = B;
}
Denna ser lite fishy ut. Du skapar en null variable av Försäkringstyp som du sen assignar värdet från B, sen assignar du personförsäkring.Försäkringstyp också värdet från loop variabeln B. Du använder aldrig ftyp i loopen och vad är B?
foreach (var item in persansökan)
{
PersonAnsökan p;
p = item;
personförsäkring.PersonAnsökan = item;
}
Samma sak här, om du ska assigna personförsäkring.PersonAnsökan till item så kan du väl göra det direkt i en line, är tanken att det är en lista får du köra add. Nu loopar och assignar du item till en property, så du kommer att skriva över värdet i propertyn vid varje iteration.
C:\Users\gusta\Desktop\modell.jpg kopiera denna länken och lägg i sökfältet, jag lyckas inte infoga den på något annat sätt.
Försäkringstyp och personansökan är kopplade CIA foreign key till försäkring och dem sparas precis som dem ska.
Problemet är försäkringgrundbelopp och övriga som inte har det. Då har jag gått genom försäkringstyp för att spara ett objekt av grundbelopp men jag vet inte om det funkar. För den koden jag fick ovan i tidigare inlägg letar upp en försäkrings grundbelopp men jag fick då inte det värdet jag önskar.
Så min fråga är hur jag ”kopplar” ett objekt med ett annat objekt som inte har foreign keys kopplade utan går via en annan entitet.
Såhär försökte jag skriva i koden ovan:
personförsäkring.Försäkringstyp.Försäkringgrundbelopp.ToList()[] = g;
G i detta faller motsvarar ju ID för försäkringgrundbelopp. Jag har gått igenom och satt stopp för att se och rätt värde kommer ner hit och verkar sparas men sen när jag kör den första kod delen(längre upp i tråden) där jag letar upp värdet så fick jag inte rätt värde ändå. Så jag är osäker på om det verkligen sparas eller vart felet hamnar..
Skickades från m.sweclockers.com
C:\Users\gusta\Desktop\modell.jpg kopiera denna länken och lägg i sökfältet, jag lyckas inte infoga den på något annat sätt.
Försäkringstyp och personansökan är kopplade CIA foreign key till försäkring och dem sparas precis som dem ska.
Problemet är försäkringgrundbelopp och övriga som inte har det. Då har jag gått genom försäkringstyp för att spara ett objekt av grundbelopp men jag vet inte om det funkar. För den koden jag fick ovan i tidigare inlägg letar upp en försäkrings grundbelopp men jag fick då inte det värdet jag önskar.
Så min fråga är hur jag ”kopplar” ett objekt med ett annat objekt som inte har foreign keys kopplade utan går via en annan entitet.
Såhär försökte jag skriva i koden ovan:
personförsäkring.Försäkringstyp.Försäkringgrundbelopp.ToList()[] = g;
G i detta faller motsvarar ju ID för försäkringgrundbelopp. Jag har gått igenom och satt stopp för att se och rätt värde kommer ner hit och verkar sparas men sen när jag kör den första kod delen(längre upp i tråden) där jag letar upp värdet så fick jag inte rätt värde ändå. Så jag är osäker på om det verkligen sparas eller vart felet hamnar..
Skickades från m.sweclockers.com
Länken fungerar inte då du länkar din lokala C drive. Använd en delningstjänst som imgur.
Behöver se din modell och hur allt är kopplat för att kunna ge ett svar på det. Är det en SQL relationsdatabas du använder? För att kunna få fram önskat belopp matchande en typ så bör tabellerna vara länkade via någon key. Är det many-to-many får du göra en kopplingstabell för det.
Jag är fortfarande inte säker på exakt vad det är som du behöver hjälp med, i koden ovan ser jag "questionable" syntax på ett flertal ställen som i sin tur skulle kunna orsaka problem.
Kan du quota den specifika delen du är osäker på?
Är dock rätt svårt att sitta här och felsöka en metod på 60+ rader där man inte ser något större sammanhang eller vad det är du försöker få fram. Enklast är nog att sätta en breakpoint i metoden och stega igenom och kika på dina variabler.
Hade rekommenderat att dela upp ovan metod i flera mindre metoder och till och med klasser. För nu skapar du instancer, hämtar data från databasen och sparar till databasen i samma metod (SoC & SRP).
- Nordiska TV-branschen enas i kampanj mot olagliga tv-tjänster181
- Färre IT-jobb på distans gör att fler slutar55
- 5G eller ha kvar trådad nät?43
- Kan man köpa den här till 3-pins fläktarna som följde med i chassit Kolink?24
- Dagens fynd — Diskussionstråden49619
- Veckans fråga: Vad är viktigast när du köper SSD?51
- Uppdatera gamla speldatorn för att kunna lira Hogwarts och streama utan lags? Budget 7k38
- Vilket skal till iPhone 14?6
- Plats för lite gubbgnäll9883
- Vad är en bra IT-chef?19
- Säljes Mackbook Pro M1, 8 Gb, 250 Gb, 13 inch
- Säljes AMD Ryzen 9 5900X
- Säljes Vattenkylningsdelar, kablar
- Säljes S24 128gb Marble Grey
- Säljes Keychron Q1 V2, Varmilo, Razer, DDR5
- Säljes Ryzen 7 5800X3D, Ryzen 5 2600 + 2x8 gb RAM
- Säljes Phanteks Glacier One 360 D30 Vit & Xbox Series X Wireless Controller + Adapter Windows 10
- Säljes Datordelar - i9-9900K, ASUS ROG STRIX Z390-F, DDR4 3200MHz 32GB
- Köpes 2 st 16 GB DDR4 & 2 st SSD ~ 500 GB
- Säljes Steelseries Arctis Nova Pro - Gamingpaket - Gamingstol
- Färre IT-jobb på distans gör att fler slutar55
- Microsoft fixar VPN-problem i Windows2
- Veckans fråga: Vad är viktigast när du köper SSD?51
- Googles nya AI-assistent kan se sin omgivning i realtid8
- Google lanserar ”webb”‑sökningar18
- Amazon gör Tomb Raider-serie28
- AMD lanserar prisbantade AM5-processorer utan grafikdel29
- Nordiska TV-branschen enas i kampanj mot olagliga tv-tjänster181
- Så ska bankerna ta hårdare tag mot bedragare56
- Nu kan du spela N64-spel med ray tracing35