linq无法对'Table(req)'执行创建,更新或删除操作,因为它没有主键

时间:2010-09-20 05:13:15

标签: c# linq

当表没有主键时,如何在表中添加行。

7 个答案:

答案 0 :(得分:16)

正如您的问题标题所示,LINQ to SQL无法在没有主键的表上执行创建,更新或删除操作。这是不可能的。

因此,您可能需要使用DataContext.ExecuteCommand()来执行这些操作,或者更好的是,重构数据库以使表具有主键。

答案 1 :(得分:5)

我也遇到了同样的问题。但我解决了这个问题......

  

1.在Server Explorer中设置表的主键(右键单击表可以在打开的表定义中进行检查)

     

2.在App_Code文件夹下打开dataclasses.dbml

     

3.删除已存在的表

     

4.再次设置主键后拖动同一个表。

     

5.保存所有更改。(系统将提示将更改保存到.dbml文件 - >单击是)

     

6.再次运行该应用程序

它会起作用

答案 2 :(得分:4)

让我举例说明:

SampleDataContextDataContext db = new SampleDataContextDataContext();
Employee emp = new Employee() {
      FirstName = "Experts",
      Lastname = "Comment",
      Address = "rs.emenu@gmail.com"
};

db.Employees.InsertOnSubmit(emp);
db.SubmitChanges(); 

上述代码在尝试插入新行时出现了同样的错误。这个问题背后的原因是LINQ没有提供在没有主键的情况下将数据插入表的工具。此时,您可以使用两个选项来执行插入操作。

1.创建存储过程并从LINQ调用它。

SampleDataContextDataContext db = new SampleDataContextDataContext();
db.InsertEmployeeData("Experts","Comment", "rs.emenu@gmail.com");

这里我创建了一个名为InsertEmployeeData的存储过程,并从代码中调用它。简单直接。

2.创建一个insert语句并使用LINQ执行。

SampleDataContextDataContext db = new SampleDataContextDataContext();

string insertStatement = "Insert into Employee values('Experts', 'Comment','rs.emenu@gmail.com')";
db.ExecuteQuery<Employee>(insertStatement);

这里我创建了一个普通的插入查询,并使用LINQ ExecuteQuery方法执行。

答案 3 :(得分:3)

如果无法在db中设置它,请在linq2sql设计器中设置主键。

如果没有可用作主键的列子集,请将它们全部标记为主键的一部分。

答案 4 :(得分:2)

答案 5 :(得分:1)

我可能在这里错了,因为我现在无法验证,但我相信你可以告诉Linq一个字段是一个主键,即使它实际上并不是数据库中的一个。这假设字段中的数据实际上是唯一的,并且可以用作键,即使它没有被定义为一个。

如果表没有主键,但包含可用作键的唯一数据,则告诉dbml中的L2S这是主键。

如果表中不包含可用作键的唯一数据,则必须编写删除要删除的数据的sproc。

答案 6 :(得分:1)

有些表(如供应商提供的表格)没有主要密钥!

每个答案都说&#34;添加一个主键&#34;。

看,我不会问我是否可以添加一个。条件不是由我预设的。

有没有办法JUST WRITE。不需要阅读,删除或更新。