2013-04-24 110 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();