我的数据上下文中有三个继承IFileData
的实体,但我只需要一个删除方法。如何实现?
下面的代码给出了错误The type "IFileData"is not mapped as a Table
。
public void ImageDelete<T>(T instance) where T : class, IFileData
{
using (var db = this.CreateDataContext())
{
db.GetTable<T>().DeleteOnSubmit(instance);
db.SubmitChanges();
}
}
到目前为止,我唯一的解决方案是对 .GetType()
进行切换,这有点困惑。
谢谢!
解决方案:
正如 Marc 提到的,我在调用方法中使用了 dynamic
:
ImageDelete((动态)(实例为 IFileData));
最佳答案
您可以使用实际的 T
手动构建 Expression
吗?未经测试(因为 Delete
不存在?),但类似于:
var param = Expression.Parameter(typeof(T), "x");
var lambda = Expression.Lambda<Func<T, bool>>(
Expression.Equal(
Expression.Property(param, "Key"),
Expression.Constant(instance.Key)
), param);
这不是绑定(bind)到 IFileData
,而是绑定(bind)到 T
。但是,如果 IFileData.Key
是通过显式接口(interface)实现实现的,它将失败 - T
上必须有一个明显的 Key
字段/属性。
然后:
var table = db.GetTable<T>();
var obj = table.SingleOrDefault(lambda);
if(obj != null) table.DeleteOnSubmit(obj);
db.SubmitChanges();
关于c# - 在具有接口(interface)的 LINQ to Sql 数据上下文上使用删除 - 'Interface is not mapped as a table',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7143359/