在我的架构中,我有两个数据库表.关系和关系_会员.我试图从关系表中检索其中包含特定成员的所有条目,因此必须将其与relationship_memberships表连接.我的业务对象中有以下方法: public I
public IList<DBMappings.relationships> GetRelationshipsByObjectId(int objId) { var results = from r in _context.Repository<DBMappings.relationships>() join m in _context.Repository<DBMappings.relationship_memberships>() on r.rel_id equals m.rel_id where m.obj_id == objId select r; return results.ToList<DBMappings.relationships>(); }
_Context是我的通用存储库,使用基于here概述的代码的代码.
问题是我在关系表中有3条记录,在成员资格表中有3条记录,每条成员都绑定到不同的关系. 2个成员资格记录的obj_id值为2,另一个为3.我试图检索与对象#2相关的所有关系的列表.
当此linq运行时,_context.Repository< DBMappings.relationships>()返回正确的3条记录,_context.Repository< DBMappings.relationship_memberships>()返回3条记录.但是,当results.ToList()执行时,结果列表有2个问题:
1)结果列表包含6条记录,所有类型都是DBMappings.relationships().在进一步检查时,每个真实关系记录有2个,两者都是彼此的精确副本.
2)返回所有关系,即使m.obj_id == 3,即使objId变量正确传入2.
任何人都可以看到发生了什么,因为我花了2天时间查看这段代码,我无法理解错误.我加入其他似乎工作得很好的linq查询,我的单元测试显示它们仍在工作,所以我必须做错了.好像我需要额外的一双眼睛在这一个:)
编辑:好吧所以似乎整个问题是我设计我的单元测试的方式,因为单元测试实际上没有为记录分配ID值,因为它没有击中sql(用于单元测试).
将下面的答案标记为答案虽然我喜欢他更好地加入它的方式.
试试吧public IList<DBMappings.relationships> GetRelationshipsByObjectId(int objId) { var results = (from m in _context.Repository<DBMappings.relationship_memberships>() where m.rel_id==objID select m.relationships).ToList(); return results.ToList<DBMappings.relationships>(); }