我使用实体框架代码优先,并遇到轻微问题。来自GUID的访问类
我有两个表这样:
User
+--------+-----------+
| id | name |
+--------+-----------+
| def789 | Bob Smith |
+--------+-----------+
Actions
+--------+--------------+-------------+
| id | grantedTo_id | details |
+--------+--------------+-------------+
| abc123 | def789 | some detail |
+--------+--------------+-------------+
假装3个标识字段用于此目的的GUID。
我的类看起来是这样的:
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;}
}
我的问题是,由于该类grantedTo
定义类型的用户,不返回任何在它从数据库(因为它的类型的Guid)。
因此,举例来说,如果我不喜欢简单的东西:
var action = db.Action.ToList()
foreach (var a in db.Action)
{
var user = a.GrantedTo
}
然后用户包含空。
我该如何去获取用户引用的用户名?
这些都是先完成代码,我没有对它们进行任何修改。是否有描述符或我应该使用的东西?我想我可以做这样的事情:
var action = db.Action.ToList()
foreach (var a in action)
{
var user = db.Users.Find(...???)
}
但我没有模糊的东西放在那里,因为GUID不回来。
你的'Action'类应该有'public virtual user grantedTo {get; set;}'和'public Guid UserId {get;组; }'创建一个导航属性 - 参考[实体框架关系和导航属性](https://msdn.microsoft.com/en-us/library/jj713564(v = vs.113).aspx) –
@StephenMuecke OP已经有'公共用户授予{{get;设置;}',这就够了。 '虚拟'和明确的FK属性都不需要*。 –
由于您的'grantedTo'属性不是'virtual',它不能被延迟加载,您需要使用加载或显式加载来加载它。例如,。 'var action = db.Action.Include(a => a.grantedTo).ToList();'将填充列表中动作的'grantedTo'属性。 –