InsertOnSubmit与接口(LINQ到SQL)

InsertOnSubmit与接口(LINQ到SQL),linq,linq-to-sql,interface,Linq,Linq To Sql,Interface,在我们的准则中,我们有: public interface ILogMagazine { string Text { get; set; } DateTime DateAndTime { get; set; } string DetailMessage { get; set; } } SimpleDataContext: DataContext { public Table<ILogMagazine> LogMagaines { get { return

在我们的准则中,我们有:

public interface ILogMagazine
{
 string Text { get; set; }

 DateTime DateAndTime { get; set; }

 string DetailMessage { get; set; }
}

SimpleDataContext: DataContext
{
  public Table<ILogMagazine> LogMagaines
  {
    get { return GetTable<ILogMagazine>(); }
  }
}
异常:System.InvalidOperationException:类型“DataLayer.ILogMagazine”未映射为表



我们如何解决这个问题?

这个错误是因为您没有应用[Table]属性(通常它会应用于类类型,在您的例子中是接口类型),但即使应用了,我也看不到它起作用。映射就是这样完成的——当调用GetTable时,它会查找Table属性以知道从何处插入/查询数据

也就是说,我很确定你不能用一个接口来做这件事。GetTable上的类型必须是具体的,因为它使用GetTable上传递(或推断)的泛型arg来知道要为查询创建什么对象。虽然从技术上讲,它可能可以用于插入,但相同的GetTable同时用于插入和查询,而这肯定不适用。同样的原因是XmlSerializer和DataContractSerializer不能与接口一起工作

您总是需要一个具体的类型,但您的实体类型仍然可以实现接口。我猜您正在尝试将这些信息传递到某个地方(可能是服务层),您可能需要重新考虑一下这一点

DataContext db = new SimpleDataContext("...");

ILogMagazine lg = new LogMagazine()
{
 Text = "test",
 DateAndTime = DateTime.Now,
 DetailMessage = "test",
};

db.LogMagazines.InsertOnSubmit(lg); // Exception thrown
db.SubmitChanges();