[英]Using delete on a LINQ to Sql Data Context with an Interface - 'Interface is not mapped as a table'
我的数据上下文中有三个实体继承了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((dynamic)(instance as 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);
这则未绑定到IFileData
,但T
。 但是,如果通过显式接口实现实现IFileData.Key
,它将失败 - 在T
上必须有明显的Key
字段/属性。
然后:
var table = db.GetTable<T>();
var obj = table.SingleOrDefault(lambda);
if(obj != null) table.DeleteOnSubmit(obj);
db.SubmitChanges();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.