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

主キーの ID を指定することはありません。2 つの解決策があります。

  • コードから明示的な ID を指定します (常に一意であることを確認する必要があります)。
  • 行 [EmpresaID] [int] NOT NULL にキーワード IDENTITY を追加して、id フィールドを INT IDENTITY にし、挿入ごとに一意の値が割り当てられるようにします。
于 2012-04-25T21:00:32.853 に答える
1

EmpressaId で Identity を宣言するのを忘れました。:)

于 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 に答える