c# - 当表没有主键时使用 DeleteAllOnSubmit

标签 c# sql-server linq linq-to-sql

我正在尝试从没有主键的数据库中删除记录。以下作品:

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();
}

我收到以下错误,因为该表没有主键:

Additional information: Can't perform Create, Update, or Delete operations on 'Table(myTable)' because it has no primary key.

我找到了以下有关此问题的旧帖子

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 不是一个选项(除非我只添加一个行计数标识列)。

最佳答案

如果没有主键,则不会发出两个接口(interface):INotifyPropertyChangingINotifyPropertyChanged,因此 LINQ to SQL 不知道您的记录已更改。执行以下操作:

  1. 打开 LINQ 设计器。
  2. 打开要从中删除记录的表的属性窗口。
  3. 单击要删除的实体中的任意列,您将看到标有“主键”的属性。
  4. 将要用作主键的列的值更改为 true。

关于c# - 当表没有主键时使用 DeleteAllOnSubmit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34492509/

相关文章:

c# - 在 C# 中序列化嵌套类?

c# - LINQ:如何缩短我的代码?

c# - 在列表中添加对象的两个变量

sql - 使用 SQL Server 临时表的最佳实践

sql - 如何防止 'query timeout expired' ? (SQLNCLI11 错误 '80040e31' )

sql-server - 如果今天的日期介于 startDateTime 和 endDateTime 之间,则只选择一行,否则选择所有行

c# - 与 Linq To Sql 和 ASP.NET 的并发

c# - 根的红黑树删除

c# - 我怎样才能用 C# 延迟?

c# - 如何在PC上下载语言包以使用离线谷歌翻译?