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

本文关键字:问题 对象 保存 LINQ | 更新日期: 2023-09-27 18:32:26

在 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();

可以告诉我我的代码被磨损了吗?

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

你忘了在EmpressaId上声明Identity。 :)

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

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

您没有设置 EmpresaID。

要么在代码中显式设置它,要么更改 SQL 表以将 IDENTITY 添加到 EmpresaID 列中。

您从不为主键提供 ID。有两种解决方案:

  • 从你的代码中给它一个明确的ID(你需要确保它始终是唯一的)
  • 在第 [EmpresaID] [int] NOT NULL 行中添加关键字 IDENTITY 以使您的 id 字段成为 INT IDENTITY,该标识符在每次插入时分配一个唯一值。