verwendetes Datenbanksystem: <SQL Server: 2005 - .NET Framework 3.5>
Hi,
Ich habe hier ein EntityObject (UserInAffiliate).
Nun würde ich gerne den Namen der zugehörigen Region auslesen -> Die Tabelle Regions ist als FK markiert & mit einer ID identifiziert.
foreach (UserInAffiliates usr in lUser)
{
TableRow TrUser = new TableRow();
TableCell TdUserId = new TableCell() { Text = usr.FK_UserId };
TableCell TdRoleId = new TableCell() { Text = usr.FK_Roles.Name };
TrUser.Cells.AddRange(new TableCell[] {TdUserId, TdRoleId});
TblUsers.Rows.Add(TrUser);
}
Das Ganze schlägt dann jedoch fehlt, weil FK_Roles null ist.
Warum?
Einträge sind vorhanden.
Der benötigte Teil des Modells habe ich euch angehängt.
Gruess,
Regenwurm
Hallo Regenwurm,
meinst Du vielleicht Role statt Region?
Wenn usr.FK_Roles null ist, ist dann usr.FK_UserId auch null?
Wie mir scheint, ist lUser schon nicht richtig befüllt.
Gruß
Mango
Hi,
Sorry - Role stimmt natürlich (FK_Roles genauert gesagt).
Nein FK_UserId ist ausgefüllt (Liegt aber wohl daran, dass dies keine Referenz ist - sondern das Attribut in der Tabelle selber existiert).
Also,
Du müsstest mal posten, wie lUser vorher befüllt wird. Da muss irgendwo der Haken sein.
Mango
public IQueryable<UserInAffiliates> LoadAllAffiliateUsers_AffiliateFiltered(int AffiliatedId)
{
var ctx = RPDEntities.Context;
return ctx.UserInAffiliates.Where(usr => usr.FK_AffiliateId == AffiliatedId);
}
Das Ganze schlägt dann jedoch fehlt, weil FK_Roles null ist.
Warum ist dies null
. Ein User hat eine Rolle, nicht? Dann mach per Datenbank so dass ein User eine Rolle haben MUSS, dann ist FK_Roles nie null
.
Gruß
Michael
Hätte ich auch gesagt, aber im Primary Key ist null eh nicht erlaubt.
Hallo Regenwurm schau Dir mal
Loading Related Objects (link korrigiert
an, und schau ob Dir weiter hilft.
Evtl schlage ich dir vor dass du eine IDENTITY als PK machst und nicht eine Konsellation von 3 Spalten. Ich bin kein Freund von kombinierten ID, da sie grundsätzlich schwerer zu warten sind. Auch die SELECT Abfragen werden unnötig kompliziert. In deinem Beispiel gehts noch, aber denk dir mal den Fall aus wenn eine Tabelle (FOO) eine Referenz von UserInAffiliates hat. Dann muss diese Tabelle alle 3 PK von UserInAffiliates als FK speichern. Und so weiter.
Ich würde vorschlagen du machst eine IDENTITY und erstellst einen UNIQUE KEY auf den 3 Spalten.
@unconnected, bitte repariere deinen Link
Das Ganze schlägt dann jedoch fehlt, weil FK_Roles null ist.
Warum ist diesnull
. Ein User hat eine Rolle, nicht? Dann mach per Datenbank so dass ein User eine Rolle haben MUSS, dann ist FK_Roles nienull
.Gruß
Michael
Hi,
In den Tabellen ist null
nicht erlaubt - es sollte also immer eine Zuweisung geben.
Ich habe im Entity Model mal die Relation der 2 Tabellen Roles & UserInAffiliates geöffnet (Anhang).
Sieht so aus als ob er zwar die referenz zwischen den Tabellen kennt, aber nicht weiss auf welche Attribute er schauen soll.
Ich habe nun unter Principal Key den FK_RoleId mit RoleId zu verknüpfen versucht.
Erhalte dann jedoch den Error
Error 111: Properties referred by the Principal Role rpdlic_UserAffiliatesRoles must be exactly identical to the key of the EntityType T_IS.RPDLicenseManager.UserInAffiliates referred to by the Principal Role in the relationship constraint for Relationship T_IS.RPDLicenseManager.FK_rpdlic_UserAffiliates_rpdlic_Roles. Make sure all the key properties are specified in the Principal Role.
Was will mir diese Fehlermeldung genau mitteilen?
@unconnected
Danke für den Link - aber so wie es aussieht ist dies für .NET 4.0 (Ich benutze hier .NET 3.5).
Gruss,
Regenwurm
Im 3.5 hat das Entity Framework imho noch kein Lazy Loading...
Wenn Du also schreibst
return ctx.UserInAffiliates.Where(usr => usr.FK_AffiliateId == AffiliatedId).Include("FK_Roles")
sollte es auch gefüllt sein..
Hi unconnected,
Ein 'Include' gibt es leider nicht.
Meinst du ich könnte sonst mit Join etwas rumwerkeln?
Gruss
Du hast recht das Include gehört vor das Where...
ctx.UserInAffiliates.Include("FK_Roles").Where(usr => usr.FK_AffiliateId == AffiliatedId);
sorry Flüchtigkeitsfehler. Da müsste es dann das Include aber geben 😃
Interessiert mich ja nun doch, hats geklappt?
Hi unconnected,
Sorry für die spätere Antwort - war gestern leider nicht im Büro.
Das Ganze funktioniert mit dem Include!! 😃
Ich erhalte nun eine Referenz auf den Eintrag in der Rollen-Tabelle.
Besten Dank!
Gruess,
Regenwurm