Frage

Ich spiele um mit LinqToSQL eine vorhandene mehrsprachige Datenbank, aber ich renne in Fragen Abbilden eine ziemlich wichtig eine Eins-zu-Eins-Beziehung, so vermute ich, ich bin die Funktion falsch für meine Datenbank-Design.

Nehmen wir zwei Tabellen, Kategorie und CategoryDetail. Kategorie enthält die CategoryId (PK), ParentId und TemplateID. CategoryDetail enthält die CategoryId (FK), LanguageId, Titel und Beschreibung (in der entsprechenden Sprache), mit einem kombinierten PK von CategoryId und LanguageId.

Wenn ich per Drag-and-Drop auf diese Tabellen in den LinqToSQL Designer, die sich ergebende Objektmodell hat Kategorie mit einer Sammlung von CategoryDetail Objekte, die nie der Fall sein sollte. Ich möchte auf LanguageId auf der Ebene Datacontext filtern zu können, was bedeutet, dass die ganze Kategorie innerhalb Category.CategoryDetail verkapselt ist, nicht alle Sprachversion innerhalb Category.CategoryDetails eingekapselt ist.

Diese Datenbank hat gut funktioniert auf meiner alten Objektbibliothek (eine alte Schule benutzerdefinierten BOL und DAL), aber ich fürchte, dass LinqToSQL würde dies zu ändern, um mir das gewünschte Ergebnis zu erhalten.

Was ist der beste Weg, diese Beziehung zu machen (und Sprache Filterung) so nahtlos wie möglich?

War es hilfreich?

Lösung

Sie können die Eigenschaften des Vereins anzuzeigen. (Rechtsklick auf die Linie, die die Vereinigung und zeigen Eigenschaften.) Die Eigenschaften werden Ihnen sagen, wenn es sich um eine Eins-zu-eins oder eins-zu-viele-Beziehung ist. Dies wird in Code reflektiert durch entweder eine einzelne Einheit Assoziation mit (one-to-one) oder einer Entitätsmenge Association (one-to-many).

Andere Tipps

würde ich davon ausgehen, kann nicht eine echte 1 zu 1. Klingt wie Sie eine PK von CatID und Lang-ID auf der Katze Details Tisch. Das würde erklären, warum die eine Sammlung setzen. Ich könnte falsch sein, wie Sie die PK der CatDetails Tabelle erwähnen didnt

EDIT: Ein kombinierte Stück CatID und Lang ID macht, dass eine 1: m-Beziehung, und Linq to SQL ist eigentlich die richtige Sache zu tun. Der einzige Weg, es möglicherweise ein echtes 1 sein könnte: 1 ist, wenn Sie auch eine lang-ID auf der Katze Tisch haben und das war Teil des FK. Ich htink Sie müssen möglicherweise überdenken, was Sie tun wollen, oder wie Sie es umsetzen wollen.

Ich denke, LINQ to SQL-Modellen die Datenbankstruktur direkt. Sie haben zwei Tabellen, so dass es zwei Objekte erstellt.

Haben Sie Entities einen Blick auf LINQ hatte diese Sie eine weitere Schicht über der Datenbank strucure erstellen können für lesbarer Klassen zu machen.

Da Sie nicht über eine 1: 1-Beziehung die Zuordnung allein wird die gewünschte Funktionalität nicht bieten. Allerdings ist es einfach, eine Methode in der übergeordneten automatisch generierte Klasse zu schaffen, der die Arbeit erledigt:

public partial class Category 
{
  public IEnumerable<CategoryDetail> GetDetailsByLanguage(string langID)
  {
    return this.CategoryDetails.Where(c => c.LangID == langID);
  }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top