当表没有主键时,如何在表中添加行。
答案 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)
我不知道这是否很明显,但也许你可以设置一个主键。 http://www.functionx.com/vb/adonet/primarykey.htm
也看到了 http://www.i-think22.net/archives/2009/07/24/linq-to-sql-and-tables-with-no-primary-key/
答案 5 :(得分:1)
我可能在这里错了,因为我现在无法验证,但我相信你可以告诉Linq一个字段是一个主键,即使它实际上并不是数据库中的一个。这假设字段中的数据实际上是唯一的,并且可以用作键,即使它没有被定义为一个。
如果表没有主键,但包含可用作键的唯一数据,则告诉dbml中的L2S这是主键。
如果表中不包含可用作键的唯一数据,则必须编写删除要删除的数据的sproc。
答案 6 :(得分:1)
有些表(如供应商提供的表格)没有主要密钥!
每个答案都说&#34;添加一个主键&#34;。
看,我不会问我是否可以添加一个。条件不是由我预设的。
有没有办法JUST WRITE。不需要阅读,删除或更新。