在 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();
可以告诉我我的代码被磨损了吗?
你忘了在EmpressaId上声明Identity。 :)
您的映射显示EmpresaID
是由数据库(IsDbGenerated = true
)生成的,但是表定义不会为关联的表生成ID。
您可能希望将 EmpresaID 的列类型更改为 IDENTITY
以便生成主键值。
您没有设置 EmpresaID。
要么在代码中显式设置它,要么更改 SQL 表以将 IDENTITY 添加到 EmpresaID 列中。
您从不为主键提供 ID。有两种解决方案:
- 从你的代码中给它一个明确的ID(你需要确保它始终是唯一的)
- 在第 [EmpresaID] [int] NOT NULL 行中添加关键字 IDENTITY 以使您的 id 字段成为 INT IDENTITY,该标识符在每次插入时分配一个唯一值。