我正在编写一个应用程序,我们需要将一个基本实体扩展到许多不同的事物(例如员工、车辆等)。设计是这样的,有一个实体表和一个具有特定类型值的第二个表,例如,员工将有一个 ID 号,但车辆将有一个登记号。
我继承了数据上下文中生成的类实体,但在我的存储库中进行转换时遇到了问题。这样做的正确方法是什么?
public class cAccountEmployee : cAccountEntity
{
public string id_number
{
get
{
try
{
return this.cAccountEntityValues.Single(e => e.type == 1).value;
}
catch (Exception)
{
return "";
}
}
set
{
try
{
this.cAccountEntityValues.Single(e => e.type == 1).value = value;
}
catch (Exception)
{
this.cAccountEntityValues.Add(new cAccountEntityValue()
{
accountentity_id = this.id,
cAccountEntity = this,
type = 1,
value = value
});
}
}
}
}
然后在我的存储库中(不继承任何东西)
public IEnumerable<cAccountEmployee> All(int accountholder_id)
{
return db.cAccountEntities.Where(e => e.accountholder_id == accountholder_id).OrderBy(a => a.name).Cast<cAccountEmployee>();
}
public cAccountEmployee Single(int id)
{
return db.cAccountEntities.Single(a => a.id == id) as cAccountEmployee;
}
强制转换在单一方法中失败,因此我返回 null。我的理解是,您不能从基类定义显式或隐式运算符?如何将基类 Linq 结果转换为继承的 Employee 类,同时仍保持其数据库状态以便我可以提交更改?