我正在尝试从没有主键的数据库中删除记录。以下作品:
using (myDataContext db = new myDataContext ())
{
db.ExecuteCommand("DELETE FROM myTable WHERE TradeDate = {0}", date);
}
(其中date
是函数的输入)。但是当我尝试将其转换为LINQ
using (myDataContext db = new myDataContext ())
{
db.myTable.DeleteAllOnSubmit(db.myTable.Where(t => t.TradeDate.Date == date.Date));
db.SubmitChanges();
}
我收到以下错误,因为该表没有主键:
附加信息:无法对'Table(myTable)'执行创建,更新或删除操作,因为它没有主键。
我发现以下有关此问题的旧帖子
DB:4.44:Dml Operations Using Linq Query For A Table Without Primary Key zm
Dml Operations using linq query for a table without primary key.
但我不明白如何实施他们建议的修复方法(即将另一个密钥设置为IsPrimary
)。
有没有办法用LINQ做到这一点?请记住,在实际的SQL表中添加PK不是一种选择(除非我只是添加一行计数标识列)。
答案 0 :(得分:3)
如果没有主键,则不会发出两个接口:INotifyPropertyChanging
和INotifyPropertyChanged
,因此LINQ to SQL不知道您的记录已更改。执行以下操作:
答案 1 :(得分:0)
请在EF模型中使用唯一列作为主键。
否则使用 DataContext.ExecuteCommand()
答案 2 :(得分:0)
正如其他人指出的那样,您需要为表添加主键。然后执行查询。
否则,您可以尝试手动删除行:
var query = myTable.AsEnumerable().Where(r => r.Field<Date>("TradeDate") == date.Date);
foreach(var row in query.ToList())
row.Delete();