J'utilise le code Entity Framework d'abord et a couru dans un petit problème.classe d'accès de GUID
J'ai deux tables en tant que tels:
User
+--------+-----------+
| id | name |
+--------+-----------+
| def789 | Bob Smith |
+--------+-----------+
Actions
+--------+--------------+-------------+
| id | grantedTo_id | details |
+--------+--------------+-------------+
| abc123 | def789 | some detail |
+--------+--------------+-------------+
faire semblant les 3 champs d'identification sont GUIDs à cet effet.
Mes cours ressemblent à:
User
{
public Guid id {get; set;}
public string name {get; set;}
}
Actions
{
public Guid id {get; set;}
public User grantedTo {get; set;}
public string details {get; set;}
}
Mon problème est que, puisque la classe définit grantedTo
en tant que type utilisateur, rien n'est retourné en elle la base de données (car il est de type Guid).
Ainsi, par exemple, si je fais quelque chose de simple comme:
var action = db.Action.ToList()
foreach (var a in db.Action)
{
var user = a.GrantedTo
}
Ensuite, l'utilisateur contient null.
Comment puis-je obtenir l'utilisateur référencé par le Id?
Ils ont été fait le code d'abord, je l'ai apporté aucune modification à leur disposition. Y a-t-il un descripteur ou quelque chose que je devrais utiliser? Je pensais que je pouvais faire quelque chose comme:
var action = db.Action.ToList()
foreach (var a in action)
{
var user = db.Users.Find(...???)
}
Mais je n'ai pas la moindre idée de quoi mettre là-dedans depuis le GUID ne revient pas non plus.
Votre classe 'Action' devrait avoir' public virtual User grantedTo {get; set;} 'et' public Guid UserId {get; ensemble; } 'pour créer une propriété de navigation - reportez-vous à [Entity Framework Relationships and Navigation Properties] (https://msdn.microsoft.com/fr-fr/library/jj713564 (v = vs.113) .aspx) –
@StephenMuecke OP déjà avoir un utilisateur public grantTo {get; set;} ', ce qui est suffisant. La propriété FK «virtuelle» ou explicite n'est pas * obligatoire *. –
Puisque votre propriété 'grantedTo' n'est pas' virtual', elle ne peut pas être chargée paresseusement et vous devez la charger en utilisant un chargement rapide ou explicite. Par exemple,. 'var action = db.Action.Include (a => a.grantedTo) .ToList();' va peupler la propriété 'grantedTo' des actions de la liste. –