Entity Framework 4.3 één-op-één relatie met buitenlandse relaties

Ik hoop dat iemand me meer inzicht zal geven na talloze uren te hebben doorgebracht met het configureren van het datamodel van een bestaande database. Ik heb de volgende databasestructuur

User (Table)
    UserID  (P.K Identity int)
    UserName (nvarchar)

UserSetting (Table)
    UserSettingsID (P.K Identity int)
    UserSettingsUserID (F.K of User.UserID)

In het model heb ik een eigenschap UserSetting voor gebruikersentiteit en gebruikerseigenschap op de entiteit die als gebruiker fungeert.

In de configuratie van het type gebruikersinstelling entiteit;

 this.HasRequired(t => t.User)
     .WithMany(t => t.UserSetting)
     .HasForeignKey(d => d.UserSettingsUserID)
     .WillCascadeOnDelete(false);

Het bovenstaande werkt alleen (dit is de enige oplossing die ik op dit moment heb) als ik de UserSetting als ICollection in de gebruikersentiteit maak. Ik heb geprobeerd vreemde sleutelattributen in te stellen en bijna alles wat ik op het net kan vinden, maar geen geluk. Dit is mijn eerste keer coderen met entiteitsraamwerk met repositorypatroon en werkeenheid.

3
Om de 1 op 1 relatie in de DB in uw schemadefinitie af te dwingen, hebt u een unieke beperking nodig in de kolom UserSettingUserID in de tabel UserSetting . Als ik me niet vergis, worden unieke beperkingen alleen ondersteund in EF 5.0: geekswithblogs.net/JoshReuben/archive/2010/09/13/… blogs.msdn.com/b/efdesign/archive/2011/03/09/ & hellip;
toegevoegd de auteur Danny Varod, de bron
@DannyVarod: Unieke beperkingen worden niet ondersteund in EF 5.0: blogs.msdn.com/b/adonet/archive/2012/05/15/… Het stond vorig jaar op de kaart, maar heeft het niet gehaald in EF 5.
toegevoegd de auteur Slauma, de bron

3 antwoord

U kunt dit schema gebruiken voor een entiteitstoewijzing van 1 tot 0,1 in EF 4.x:

Table Users
    UserID int, PK, Identity
    UserName nvarchar

Table UserSettings
    UserID int, PK, non-Identity, FK to Users
    Settings nvarchar(max) or any other type

Of dit schema voor een 1 tot 1 entiteittoewijzing in EF 4.x (de tabel in twee entiteiten splitsen):

Table Users
    UserID int, PK, Identity
    UserName nvarchar
    Settings nvarchar(max) or any other type

Links for table splitting:
Using DB-First
Using Code-First

2
toegevoegd

Bekijk het blog van deze gast voor een oplossing:

http://weblogs.asp.net/manavi/archive/2011/01/23/associations-in-ef-code-first-ctp5-part-3-one-to -een-buitenlandse key-associations.aspx

Eigenlijk:

modelBuilder.Entity().
HasRequired(us => us.UserSetting).
WithMany().
HasForeignKey(u => u.UserSettingId);

Let goed op hoe hij de klasseneigenschappen Gebruiker en de namen van de eigenschappen heeft gestructureerd. Namen moeten overeenstemmen.

Overigens: het versieren van entiteiten met gegevensannotaties is veel eenvoudiger dan met de Fluent API.

2
toegevoegd

Als u One to One zoekt, moet de tabel UserSetting één primaire sleutel hebben en moet deze sleutel in dezelfde tijd een externe sleutel zijn voor de gebruikerstabel:

Gebruiker (tabel) Gebruikers-id (P.K Identiteit int) Gebruikersnaam (nvarchar) UserSetting (tabel) UserSettingsID (P.K Identity int AND F.K of User.UserID)

0
toegevoegd