C# 具有继承的通用Linq2SQL存储库问题

C# 具有继承的通用Linq2SQL存储库问题,c#,.net,linq-to-sql,C#,.net,Linq To Sql,我在Linq2SQL之上有一个通用存储库实现。基本上,它使用数据上下文上的表来获取IQueryable,然后在其上运行查询: private readonly IQueryable _queryable; private readonly DataContext _context; public Repository(DataContext context) { _context = context; _queryable = context.GetTable().AsQuer

我在Linq2SQL之上有一个通用存储库实现。基本上,它使用数据上下文上的表来获取IQueryable,然后在其上运行查询:

private readonly IQueryable _queryable;
private readonly DataContext _context;

public Repository(DataContext context)
{
    _context = context;
    _queryable = context.GetTable().AsQueryable();
}
问题在于继承。如果我有两个继承的表,则会引发异常:

[InheritanceMapping(Code="1", Type=typeof(Staff))]
[InheritanceMapping(Code="2", Type=typeof(Resident), IsDefault=true)]
public class Person { }
public class Resident : Person { }
public class Staff : Person { }
现在,在创建存储库时会引发异常:

[InheritanceMapping(Code="1", Type=typeof(Staff))]
[InheritanceMapping(Code="2", Type=typeof(Resident), IsDefault=true)]
public class Person { }
public class Resident : Person { }
public class Staff : Person { }
System.InvalidOperationException:无法检索继承子类型“Staff”的表,请改为尝试人员表

现在故事还没有结束。我可以切换到使用存储库进行查询,但当涉及到保存对象时,我需要使用派生类型(即Staff),否则将引发另一个异常,因此我最终拥有两个不同的存储库实例:一个用于保存和更新操作,另一个用于查询,而一个应该足够了


非常感谢您的帮助。

我想这是因为您的班级
员工
住户
并不是从班级
人员
继承的。谢谢您指出这一点,尽管这是一个打字错误。我已经修复了上面的代码段。你解决过这个问题吗?对于类似的继承层次结构,我也有同样的问题。