系统.InvalidOperationException:不能对'Table(SerialNumbers)
本文关键字:Table SerialNumbers InvalidOperationException 不能 系统 | 更新日期: 2023-09-27 18:18:56
目前,我正在尝试使用LINQ连接到第三方数据库,以向保存序列号的表添加值。然而,当我试图运行我的程序时,问题标题的错误将弹出。
当前,程序执行此命令失败:
string STRout = foo.AccountInfo(email, serialNum, "TEST2");
进入accountInfo方法,调用serialNumber方法的行如下(其当前位置用于测试目的):
this.newSerialNumber(serialNum);
最后,newSerialNumber方法如下所示:
[WebMethod]
public bool newSerialNumber(string serialNum)
{
SerialNumbers new_SN = new SerialNumbers();
//serialNumber is the primary key in the SerialNumbers table
new_SN.SerialNumber = serialNum;
new_SN.Count = 1;
linqQueries.SerialNumbers.InsertOnSubmit(new_SN);
linqQueries.SubmitChanges();
return true;
}
这段代码是从已经工作的代码派生出来的,其内容如下:
[WebMethod]
public bool CustomerInfo(string DealershipName, string DealershipEmail, string DealershipAddress, string Name, string DealershipNumber, string DealershipPhone, string serialNumber, string registrationNum)
{
//Add the new customer to the table
CustomerInformation newCustomer = new CustomerInformation();
newCustomer.DealershipName = DealershipName;
newCustomer.DealershipEmail = DealershipEmail;
newCustomer.DealershipAddress = DealershipAddress;
newCustomer.Name = Name;
newCustomer.DealershipNumber = DealershipNumber;
newCustomer.DealershipPhone = DealershipPhone;
linqQueries.CustomerInformations.InsertOnSubmit(newCustomer);
linqQueries.SubmitChanges();
//string activateCode = getActivation(registrationNum);
CustomerAccount newAccount = new CustomerAccount();
newAccount.SerialNumber = serialNumber;
newAccount.DealershipEmail = DealershipEmail;
newAccount.RegistrationNumber = registrationNum;
newAccount.CustomerInformation = newCustomer;
linqQueries.CustomerAccounts.InsertOnSubmit(newAccount);
linqQueries.SubmitChanges();
return true;
}
除了serialNumber值是SerialNumbers表中的主键外,它还作为唯一值列出。
是我错过了什么,还是有某种我不知道的异常的解决方法?
更新:找到答案了。结果表明,程序在整个过程中都没有将SerialNumber标识为主键。在再次查看此答案后,我决定在解决方案中查找"IsPrimaryKey"。事实证明,在处理数据库表的解决方案中,我完全遗漏了一个文件。SerialNumbers表代码如下:
<Table Name="dbo.SerialNumbers" Member="SerialNumbers">
<Type Name="SerialNumbers">
<Column Member="SerialNumber" Type="System.String" CanBeNull="false" />
<Column Member="Count" Type="int" CanBeNull="false" />
</Type>
在我注意到这一点之后,解决方案变得显而易见。
<Column Member="SerialNumber" Type="System.String" CanBeNull="false" />
应该是
<Column Member="SerialNumber" Type="System.String" IsPrimaryKey="true" CanBeNull="false" />
这个快速的改变修复了这个问题。
注:当使用第三方数据库时,请确保数据库上的dll文件是最新的!如果不这样做,可能会导致程序不能按预期运行。