我使用實體框架代碼優先,並遇到輕微問題。來自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'屬性。 –