这是我要完成的工作:
有些实体应该被“软删除”,所以我想添加一个名为“IsDeleted”的字段(和相应的列)。我希望这个属性只能由 DAL 访问(这可以通过朋友程序集来完成)。如果 DAL 可以通过接口 (IDeletable) 以相同的方式对待所有这些实体,我也很高兴。
为了实现这两个目标,我可以让 IDeletable 成为一个内部接口,并且在实现这个接口的类中我可以使用显式接口:
bool IDeletable.IsDeleted { get; set; }
DAL 代码可能看起来像这样:
public void Delete<T>(T entity)
{
var d = entity as IDeletable;
if(d != null)
//soft delete
d.IsDeleted = true;
else
//hard delete
//....
}
问题是,据我所知,EF Code First 无法生成列。我尝试过使用表达式,但是当我尝试转换为 IDeletable 时它会抱怨。
有没有办法强制 EF Code First 创建列而不使用表达式?