背景:項目是通過進口的DbContext從TSV文件中的數據爲EF5 DB數據導入工具。檢索屬性
問題:我需要爲ForeignKeys進行查找,而這樣做的進口。我有辦法做到這一點,但如果ID不起作用的檢索。
所以我有一個TSV文件的例子將是
Code Name MyFKTableId
codevalue namevalue select * from MyFKTable where Code = 'SE'
所以,當我處理文件,並查找「...... ID」專欄中,我知道我需要做的查找,找到FK的「 ...'總是實體類型,所以這非常簡單。我的問題是,我沒有獲得
string childEntity = column.Substring(0, column.Length - 2);
DbEntityEntry recordType = myContext.Entry(childEntity.GetEntityOfReflectedType());
DbSqlQuery foundEntity = myContext.Set(recordType.Entity.GetType()).SqlQuery(dr[column])
任何建議,將不勝感激foundEntity結果的性質。我需要保持這個通用的,所以我們不能使用已知的類型轉換。從IBaseEntity訪問ID屬性,所以我可以投的是,但所有其他實體類型必須不能固定
注:在MyFKTableId值的SQL是不是必需的。如果有更好的選擇可以擺脫SqlQuery(),我會接受建議。
解決方案: 好我所做的是創建一個名爲IdClass的類,它只有一個Id的Guid屬性。修改我的sql只返回Id。然後在數據庫上實現SqlQuery(sql)調用,而不是像Set([Type]).SqlQuery(sql)那樣調用。
IdClass x = ImportFactory.AuthoringContext.Database.SqlQuery<IdClass>(sql).FirstOrDefault();