【问题标题】:System.InvalidOperationException: Can't perform Create, Update, or Delete operations on 'Table(SerialNumbers)' because it has no primary keySystem.InvalidOperationException:无法对“表(序列号)”执行创建、更新或删除操作,因为它没有主键
【发布时间】:2015-10-22 21:02:20
【问题描述】:

目前,我正在尝试使用 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 表中的主键之外,还被列为唯一值。

我是否遗漏了什么,或者在这种情况下我不知道是否有某种解决方法来解决这个异常?

【问题讨论】:

    标签: c# .net sql-server database linq


    【解决方案1】:

    更新:想出了答案。事实证明,该程序始终没有将 SerialNumber 标识为主键。再看了this的回答后,我决定在解决方案中寻找“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 文件保持最新!否则可能会导致程序无法按预期运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      • 2011-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多