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).
- EU vill standardisera laddare och laddkablar39
- Windows 11, vilka gamla program fungerar där?72
- Bra budgetskärm 1440p?2
- Klent PSU för 9070 XT?16
- Med vad, och hur, ersätter jag Sonos?76
- Bör man pensionera en Asus RT-AC87U router från 2017?22
- Uppgradera eller behålla nuvarande system?3
- Wordle på svenska - ordlig.se9,7k
- Robot fönsterputs0
- Vad lyssnar du på just nu?16k
- Säljes Garderobsrensning - eGPU, UPS och utvecklarskärm
- Säljes Audeze LCD-2 Closed Back, Hörlurar
- Säljes Borderlands 4 - Spelkod
- Säljes Stationär dator
- Köpes Samsung Galaxy S23 eller liknande köpes
- Säljes Ps4 500gb + Yamaha rx v477
- Säljes AMD Starfield Special Edition Ryzen 7 7800X3D & Radeon RX 7900 XTX m.m
- Säljes Samsung Galaxy Tab S10 Lite wifi 128GB
- Säljes Amd R9 5900xt ny i låda
- Säljes AMD Ryzen 5 5600G
- EU vill standardisera laddare och laddkablar39
- Försöker ersätta mus med en ring20
- Asus lanserar sin första AMD-baserade NUC11
- Fler PC-spelare än någonsin33
- Asus lanserar ljusstark 8K‑skärm39
- Hälften av alla satelliter skickar data okrypterat22
- Commodore försöker locka Windows 10-användare22
- Nu ska det avgöras – följ Slaget live på söndag!7
- Quiz: Vad kan du om floppar och fails96
- 33 procent snabbare grafik i Panther Lake4
Externa nyheter
Spelnyheter från FZ
- Silent Hill 2-remaken har nu sålt 2,5 miljoner exemplar idag
- Football Manager 26 kommer ha FIFA-licensen och VM igår
- Dead Space-skaparen hoppas på att få göra en uppföljare under EAs nya ägare igår
- Marvel Rivals första PVE-läge är baserat på Marvel Zombies-serien igår
- Assetto Corsa Rally sladdar ut på vägarna i november 17/10