2013-04-24 84 views
1

背景:項目是通過進口的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(); 

回答

0

解決: 好吧我所做的就是創建一個名爲IdClass類,只有具有ID的GUID屬性。修改我的sql只返回Id。然後在數據庫上實現SqlQuery(sql)調用,而不是像Set([Type]).SqlQuery(sql)那樣調用。

IdClass x = ImportFactory.AuthoringContext.Database.SqlQuery<IdClass>(sql).FirstOrDefault();