0

在 LINQ/C# 中保存对象时出现问题

当我尝试保存新记录时,出现此错误:

Cannot insert the value NULL into column 'EmpresaID', table 'mydb.dbo.Empresa'; column does not allow nulls. INSERT fails.
The statement has been terminated.

使用 SQL Server Management Studio 2012 制作表格

USE [mydb]
GO

/****** Object:  Table [dbo].[Empresa]    Script Date: 25/04/2012 03:40:00 p.m. ******/
DROP TABLE [dbo].[Empresa]
GO

/****** Object:  Table [dbo].[Empresa]    Script Date: 25/04/2012 03:40:00 p.m. ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Empresa](
    [EmpresaID] [int] NOT NULL,
    [RazonSocial] [nvarchar](210) NOT NULL,
    [Nit] [nchar](20) NOT NULL,
 CONSTRAINT [PK_Empresa] PRIMARY KEY CLUSTERED 
(
    [EmpresaID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

我做了一个处理数据的类

[Table(Name = "Empresa")]
class Empresa
{
    private int _EmpresaID;
    private string _RazonSocial;
    private string _Nit;

    [Column(DbType = "int", IsPrimaryKey = true, IsDbGenerated = true)]
    public int EmpresaID
    {
        set { _EmpresaID = value; }
        get { return _EmpresaID; }
    }

    [Column(DbType = "nvarchar(210)", CanBeNull = false)]
    public string RazonSocial
    {
        set { _RazonSocial = value; }
        get { return _RazonSocial; }
    }

    [Column(DbType = "nchar(20)", CanBeNull = false)]
    public string Nit
    {
        set { _Nit = value; }
        get { return _Nit; }
    }

}

制作,这是哪种方法:

Entity.Empresa empresa = new Entity.Empresa() {                
    Nit = NuevaEmpresaNitTxtBox.Text,
    RazonSocial = NuevaEmpresaRazonSocialTxtBox.Text
};

MyDataContext.GetTable<Entity.Empresa>().InsertOnSubmit(empresa);
MyDataContext.SubmitChanges();

可以告诉我对我的代码有影响吗?

4

4 回答 4

1

您忘记在 EmpressaId 上声明身份。:)

于 2012-04-25T20:58:22.050 回答
1

您的映射说EmpresaID是由数据库 ( IsDbGenerated = true) 生成的,但是表定义不会为关联的表生成 id。

您可能希望将 EmpresaID 的列类型更改为IDENTITY以便生成主键值。

于 2012-04-25T20:58:40.237 回答
1

您没有设置 EmpresaID。

在您的代码中明确设置它,或者更改您的 SQL TABLE 以将 IDENTITY 添加到您的 EmpresaID 列。

于 2012-04-25T20:59:46.047 回答
1

你永远不会为你的主键提供一个 ID。有两种解决方案:

  • 从您的代码中给它一个明确的 ID(您需要确保它始终是唯一的)
  • 在 [EmpresaID] [int] NOT NULL 行上添加关键字 IDENTITY 以使您的 id 字段成为一个 INT IDENTITY,该字段将在每次插入时分配一个唯一值。
于 2012-04-25T21:00:32.853 回答