Entity Framework 4 – Fremdschlüsselspalten in das Modell einbeziehen

Ein anderes Ärgernis im Entity Framework 1 (EF1) ist die Fehlermeldung:

Fehler 3007: Problem beim Zuordnen der Fragmente ab Zeilen n, m: Spalten ohne Primärschlüssel [Fremdschlüssel] werden in beiden Fragmenten verschiedenen Konzeptseiteneigenschaften zugeordnet - Dateninkonsistenz ist möglich, da die entsprechenden Konzeptseiteneigenschaften unabhängig bearbeitet werden können.

Wie kommt die zustande? Die neue Auswahleigenschaft beantwortet eigentlich die Frage.

Im EF 1 kann ich Fremdschlüssel-Eigenschaften nur definieren, wenn eine Entität pro Model platziert wird, die nicht in Beziehung zu einer anderen steht, und nicht mehr. Es gibt sogar Beispiele im Internet mit dieser Vorgehensweise. Die direkte Beziehung wird im EF-Designer über die Navigationseigenschaft abgebildet. Für Web-Anwendungen ist diese Einschränkung nicht sehr nützlich, da bei Auswahlboxen die Id des Datensatzes als Value-Definition hilfreich ist und nicht das ganze Objekt.

Im EF1 besteht der Workaround darin, auf die EntityReference zurückzugreifen und die Eigenschaft zu simulieren. Dazu wird eine Partial-Klasse angelegt und die Fremdschlüssel-Eigenschaft über die EntityReference abgebildet.

C# (Pseudo-Code)

  public partial class KlassenName
  {
    public int FremdschlüsselId
    {
      get
      {
        if (this.FremdschlüsselReference.EntityKey.IsNotNull())
        {
          return this. FremdschlüsselReference.EntityKey.EntityKeyValues[0].Value.ToType<int>(0);
        }

        return 0;
      }

      set
      {
        if (value > 0)
        {
          this.FremdschlüsselReference.EntityKey = new EntityKey("ContainerName.EntitySet", "Id", value);
        }
      }     
  }  

Der direkte Zugriff auf die EntityReference wird so gekapselt, da die Aussenwelt nichts über die Interna wie ContainerName wissen soll. Der Trick besteht zudem noch darin, diese Eigenschaften nicht in Linq-Abfragen zu benutzen, da einen sonst die Fehlermeldung:

Abbildung 1
Abbildung 1: Fehlermeldung bei der Verwendung dieser Eigenschaften in Linq

begrüsst.

Diese Einschränkung zeigt, dass zu viel OO auch unflexibel machen kann. Gerade wenn das Model in einer Webanwendung verwendet werden soll, kann die neue Auswahleigenschaft einiges an Arbeit ersparen.

Abbildung 2
Abbildung 2: Auswahleigenschaft Fremdschlüssel-Eigenschaften einfügen
  •  
  • 0 Kommentar(e)
  •  

Mein Kommentar

Über jeden weiteren Kommentar in diesem Post benachrichtigen.

Zurück

Translate this page

Kategorien

  • [-].NET Development (215)
  • [-]Datenbank (26)
  • HTML (1)
  • Konfiguration (12)
  • Mind Map (10)
  • Off-topic (9)
  • Open Source (3)
  • Qualität (7)
  • Sharepoint (6)
  • Sicherheit (2)

Archiv

Social Bookmarking

Bookmark bei: Mr. Wong Bookmark bei: Webnews Bookmark bei: Icio Bookmark bei: Oneview Bookmark bei: Linkarena Bookmark bei: Favoriten Bookmark bei: Seekxl Bookmark bei: Favit Bookmark bei: Social Bookmarking Tool Bookmark bei: Power Oldie Bookmark bei: Bookmarks.cc Bookmark bei: Newskick Bookmark bei: Newsider Bookmark bei: Linksilo Bookmark bei: Readster Bookmark bei: Folkd Bookmark bei: Yigg Bookmark bei: Digg Bookmark bei: Del.icio.us Bookmark bei: Reddit Bookmark bei: Simpy Bookmark bei: StumbleUpon Bookmark bei: Slashdot Bookmark bei: Netscape Bookmark bei: Furl Bookmark bei: Yahoo Bookmark bei: Spurl Bookmark bei: Google Bookmark bei: Blinklist Bookmark bei: Blogmarks Bookmark bei: Diigo Bookmark bei: Technorati Bookmark bei: Newsvine Bookmark bei: Blinkbits Bookmark bei: Ma.Gnolia Bookmark bei: Smarking Bookmark bei: Netvouz Information