30. april 2008 - 11:26Der er
10 kommentarer og 1 løsning
Backend til flere regnskaber, entity navn ændre sig.
Jeg skal have lavet et backend system, som linker op imod navision (som køre på en SQL database).
I denne database har jeg nogle tabler. deres syntax er lavet således:
<regnskabsnavn>$<entity>
fx
<regnskabsnavn>$Item <andenRegnskabsnavn>$Item
og sådan bliver den ved for alle entity. Så for alle entity er regnskabsnavnet foran.
Jeg kunne godt tænke mig at lave et backend system, hvor jeg måske bare sender en datacontext med og måske et regnskabsnavn, Og så skal jeg via mit backend system, hente obj op, og måske i næste version gemme obj også.
Hvordan kan dette lade sig gøre. Jeg kan ikke lade vs2008 genere metadata via linq til dette formål, da regnskabsnavnet jo ændre sig, dog gør metadataen ikke.
og hvis jeg laver en datacontext via linq til hvert regnskab, så skal mit backend system jo kunne behandle det, da navnet ændre sig.
Jeg håber i forstå mit problem da det er pænt svært at forklar.
// dl
PS. spørger, hvis det er noget, som jeg ikke har gjort helt klart.
kan du ikke lave et sql-query via ADO.NET der henter data op, og derefter mapper du det selv til en hjemmelavet entitet der har de properties der er interessante i din sammenhæng?
jeg forstår dig således at du har et antal tabeller der er navngivet således: aarsregnskab2007$poster aarsregnskab2007$adresser aarsregnskab2007$indbetalinger aarsregnskab2008$emails aarsregnskab2008$personer
altså 5 tabeller med forskellige navn og med forskellige kollonner. Det kan ikke automatiseres.
metadataen er den samme. Burde man ikke kunne lave en datacontext, og lade systemet auto genere koden "on the fly", da det jo er SAMME metadata vi har med at gøre.
Eller en anden mulighed er: at jeg laver datacontext for system, til et bestemt aarsregnskab, men så skal jeg stadig have en backend som har noget logic til at administrere flowet. Og det har ikke været mig mulig, da få adgang til disse oo på denne måde. Hvis i forstår mig.
jeg kender ikke til .NET3.5/LINQ, som du formegentlig efterspørger.
Det grundlæggende i dit problem må være at få skiftet tabel navne ud i den sql der henter data. Hvilket bliver dynamisk sql, som arne_v skriver. Mit gæt er at LINQ kræver 1 klasse pr. entitet, hvilket tvinger dig til at lave 10 klasser i eksemplet. Man kan sikkert lave en "basis entitet" for f.eks. poster, og have to klasser der nedarver fra denne: regnskab2007Poster og regnskab2008Poster, for at spare noget implementering. Men det er ingen generisk løsning, som vil kunne anvendes fra nu og mange år frem uden ændringer i koden.
Hvis du skal lave et generisk system, tror jeg du selv skal kode det. - men LINQ er ikke min hjemmebane ;)
ja, jeg ved godt jeg er ved at falde ud over klippen :) Sovsekoder, du har ret i det du siger.
aarsregnskab2008$personer = aarsregnskab2007$personer = samme metadata = forskellige tablename
Burde det ikke være muligt selv at genere koden on the fly, eller som mit anden bud
give systemet datacontext som en pararemeter, men da have et backend som stadig kan køre min logic for mig.
Ved ikke om det er mig, der køre rundt i det samme. Jeg vil helst ikke rode mig ud i at skulle kode mine entityes, da der er mange attributter, og jeg ikke er en taste abe :D
Arne_v vil du give et svar, da jeg må konstatere at du har ret i at man ikke kan autogenere den kode som jeg skal bruge. Og er derfor nødtil at lave det med dynamisk sql.
hvis du har et par artikler på det, skal du ikke holde dig tilbage.
Hvad med at lade VS2008 generere LINQ filerne for en af databaserne – f.eks. for aarsregnskab2007. Derefter går du ind i denne kode og retter i den:
Du tilføjer et argument i constructoren, som skal tage regnskabsnavnet - dvs. f.eks. aarsregnskab2007 eller aarsregnskab2008. Så søger du hele koden igennem og hvert sted hvor at du finder regnskabsnavnet ændre du kiden til at bruge variablen i stedet for den hårdkodede værdi.
nielle, problemmet er med den generet kode, der skriver den over public ...
[noget entety tablename = bla bla]
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.