.NET GUI

.NET Community für WPF, Silverlight und mehr!
Willkommen bei .NET GUI. Anmeldung | Registrieren | Hilfe | Impressum | Forumsregeln
in Suchen

Zugriff auf Linq2SQL Klasse

Letzter Beitrag 06-21-2009 12:27 von Norbert Eder. 4 Antworten.
Seite 1 von 1 (5 Treffer)
Beiträge sortieren: Zurück Weiter
  • 11-27-2008 17:07

    • wallace693
    • Top 25 Mitwirkender
      Männlich
    • Registriert am 06-26-2008
    • Weiden in der Oberpfalz
    • Beiträge 31
    • Punkte 455

    Zugriff auf Linq2SQL Klasse

    Hallo,

    ich habe in einer Datenbank 3 Tabellen: Kunden(ID,PersonID,AdressID), Personen(PersonID,Name,...) und Adressen(AdressID, Land, PLZ,...). Die Tabellen sind per ForeignKey miteinander verbunden. In C# habe ich eine Linq2SQL-Klasse erstellt (Klassendiagramm im Anhang). Die Klasse heisst Kunden mit den Properties Adressen, AdressID, KundenID, Personen, PersonID.

    Meine Frage ist: Wie komme ich an das Person-Objekt - das sich ja in der Property Kunden.Personen verbirgt - heran? Den Namen usw. bekomme ich recht einfach: Kunden.Personen.Name, aber wie bekomme ich das komplette Person-Objekt (ich muss es zur Berarbeitung komplett weiterreichen)?

    Vielen Dank im Voraus, Sven


    Abgelegt unter:
    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 11-27-2008 19:10 Antwort zu

    • Norbert Eder
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 04-09-2008
    • Graz / Austria
    • Beiträge 980
    • Punkte 14.949
    • ForumsAdministrator

    AW: Zugriff auf Linq2SQL Klasse

    Was genau ist Personen? Klingt für mich irgendwie nach einer Collection ..
    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 11-27-2008 19:47 Antwort zu

    • wallace693
    • Top 25 Mitwirkender
      Männlich
    • Registriert am 06-26-2008
    • Weiden in der Oberpfalz
    • Beiträge 31
    • Punkte 455

    AW: Zugriff auf Linq2SQL Klasse

    Hallo Norbert, genau so ist es - es ist auch der Name der Tabelle.
    Die Klassen wurden durch VS erstellt.

    Hier die Scripte:

    CREATE TABLE [Global].[Personen](
    	[PersonID] [bigint] IDENTITY(1,1) NOT NULL,
    	[AnredeID] [bigint] NULL,
    	[TitelID] [bigint] NULL,
    	[Name] [varchar](60) COLLATE Latin1_General_CI_AS NULL CONSTRAINT [DF_Personen_Name]  DEFAULT ('<Name>'),
    	[Name2] [varchar](60) COLLATE Latin1_General_CI_AS NULL,
    	[Geburtsname] [varchar](60) COLLATE Latin1_General_CI_AS NULL,
    	[Rufname] [varchar](60) COLLATE Latin1_General_CI_AS NULL CONSTRAINT [DF_Personen_Rufname]  DEFAULT ('<Rufname>'),
    	[Vornamen] [varchar](60) COLLATE Latin1_General_CI_AS NULL,
    	[Firmenname] [varchar](60) COLLATE Latin1_General_CI_AS NULL,
    	[Geburtsdatum] [datetime] NULL,
    	[IsGratulierenErlaubt] [bit] NOT NULL CONSTRAINT [DF_Personen_IsGratulierenErlaubt]  DEFAULT ((1)),
    	[Sterbedatum] [datetime] NULL,
    	[IsVerstorben] [bit] NOT NULL CONSTRAINT [DF_Personen_IsVerstorben]  DEFAULT ((0)),
    	[GeschlechtID] [varchar](1) COLLATE Latin1_General_CI_AS NULL,
    	[FamilienstandID] [bigint] NULL,
    	[HobbyID] [bigint] NULL,
    	[NationalitaetID] [bigint] NULL,
    	[IsOeffentlicherDienst] [bit] NOT NULL CONSTRAINT [DF_Personen_IsOeffentlicherDienst]  DEFAULT ((0)),
    	[IsKFZHandelundHandwerk] [bit] NOT NULL CONSTRAINT [DF_Personen_IsKFZHandelundHandwerk]  DEFAULT ((0)),
    	[IsBehindert] [bit] NOT NULL CONSTRAINT [DF_Personen_IsBehindert]  DEFAULT ((0)),
    	[Timestamp] [timestamp] NULL,
     CONSTRAINT [PK_Personen] PRIMARY KEY CLUSTERED 
    (
    	[PersonID] ASC
    )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]
    
    
    CREATE TABLE [Global].[Adressen](
    	[AdressID] [bigint] IDENTITY(1,1) NOT NULL,
    	[LandID] [varchar](3) COLLATE Latin1_General_CI_AS NULL CONSTRAINT [DF_Adressen_LandID]  DEFAULT ('D'),
    	[LandText] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
    	[PLZ] [varchar](10) COLLATE Latin1_General_CI_AS NULL,
    	[Bundesland] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
    	[RegierungsBezirk] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
    	[Kreis] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
    	[Gemeinde] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
    	[Ort] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
    	[Ortsteil] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
    	[Strasse] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
    	[Strasse1] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
    	[Hausnummer] [varchar](10) COLLATE Latin1_General_CI_AS NULL,
     CONSTRAINT [PK_Adressen] PRIMARY KEY CLUSTERED 
    (
    	[AdressID] ASC
    )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]
    
    CREATE TABLE [Kunden].[Kunden](
    	[KundenID] [bigint] IDENTITY(1,1) NOT NULL,
    	[PersonID] [bigint] NULL,
    	[AdressID] [bigint] NULL,
     CONSTRAINT [PK_Kunden] PRIMARY KEY CLUSTERED 
    (
    	[KundenID] ASC
    )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]
    
    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 06-21-2009 2:16 Antwort zu

    • Tigraine
    • Top 50 Mitwirkender
      Männlich
    • Registriert am 06-20-2009
    • Klagenfurt / Österreich
    • Beiträge 9
    • Punkte 165

    AW: Zugriff auf Linq2SQL Klasse

    @Norbert - Nein. Laut Schema ist das eine einzelner Person eintrag nur das naming verwirrt.

    Du musst auch die Personen und die Addressen Tabelle in den LinQ2Sql designer ziehen damit die Datenklassen generiert werden können. 
    Daraufhin kannst du ganz einfach eine Instanz von Kunden hernehmen und deren Personen objekt weitergeben:
    z.B.

    var context = new DataContext();
    var kunde = context.Kunden.Single(p => p.KundenId == 1);
    var person = kunde.Personen

    So, und wenn man das jetzt liest macht es keinen Sinn. Das Problem ist nämlich dass LinQ to SQL kein Deutsch versteht und deshalb keine mehrzahl/einzahl Logik auf die Klassen anwenden kann.

    Hättest du deine Datenbank Tabelle "Persons" genannt dann hätte Linq 2 Sql die Entity "Person" genannt und die Collection "Persons". (Gleiches für Customers/Customer Addresses/Address)
    Woraufhin der obige code viel sinniger zu lesen wäre:

    var context = new DataContext();
    var customer = context.Customers.Single(p => p.CustomerId == 1);
    var person = customer.Person;

    mfg Daniel
     
    Ps: Der WYSIWYG Editor funktioniert im Chrome ziemlich genau garnicht :).
    Daniel Hölbling
    http://www.tigraine.at
    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 06-21-2009 12:27 Antwort zu

    • Norbert Eder
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 04-09-2008
    • Graz / Austria
    • Beiträge 980
    • Punkte 14.949
    • ForumsAdministrator

    AW: Zugriff auf Linq2SQL Klasse

    @Personen: Du hast recht, hatte ich übersehen.

    @Chrome: I know.
    • Beitragspunkte: 5
    • IP-Adresse ist Registriert
Seite 1 von 1 (5 Treffer)
Powered by Community Server (Commercial Edition)    69° - Internet-Agentur München (CMS, ASP.NET, Webdesign)