2017-07-30 18 views
1

私のテーブルには、作成された列と作成された列が含まれています。Entity Framework DatabaseGeneratedOption SQL Server GETDATE

CREATE TABLE dbo.T_CA_EMPLOYEE 
(
    ID INT NOT NULL PRIMARY KEY IDENTITY(1,1), 
    FIRST_NAME VARCHAR(50), 
    LAST_NAME VARCHAR(50), 
    CREATED DATETIME NOT NULL DEFAULT GETDATE(), 
    CREATED_BY VARCHAR(30) NOT NULL DEFAULT CURRENT_USER 
); GO 

(既存のデータベースとのコードによって最初に生成された)クラス定義:

Public Class T_CA_EMPLOYEE 

    Public Property ID As Integer 

    <StringLength(50)> 
    Public Property FIRST_NAME As String 

    <StringLength(50)> 
    Public Property LAST_NAME As String 

    Public Property CREATED As Date 

    <Required> 
    <StringLength(30)> 
    Public Property CREATED_BY As String 

End Class 

コード:

Using ctx As New Model1 
    Dim newEmployee As T_CA_EMPLOYEE = New T_CA_EMPLOYEE 
    newEmployee.LAST_NAME = "New Employee" 
    ctx.T_CA_EMPLOYEE.Add(newEmployee) 
    ctx.SaveChanges() 
    logger.DebugFormat("Created new employee {0}", newEmployee.ToString) 
End Using 

私は、ドメインオブジェクトのプロパティに注釈を付ける方法が明確ではないです。

私は上記のようなコードを実行すると、私はCREATED_BYプロパティから<Required>属性を削除し、CREATEDCREATED_BYプロパティに<DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)>属性を追加し、コードを実行した場合、私は

EntityValidationError: CREATED_BY: The CREATED_BY field is required

次取得し、I次のエラーを取得する:私は、ID列に<DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)>注釈を追加した場合

Cannot insert explicit value for identity column in table 'T_CA_EMPLOYEE' when IDENTITY_INSERT is set to OFF.

、すべてが動作しているようです。

つの質問:私は3つのプロパティの正しいDatabaseGeneratedAttributeタグを使用して

  1. アム?

  2. IDは、アイデンティティ/プライマリキーの命名規則に従っているため、<DatabaseGenerated(DatabaseGeneratedOption.Identity)>は不要と考えました。アノテーションを省略するとエラーが発生するのはなぜですか?

ご協力いただきありがとうございます。

答えて

1

1) Am I using the correct DatabaseGeneratedAttribute tags for the three properties?

正しい。 DatabaseGeneratedOption.Identityは、新しいレコードを挿入するときに列の値がデータベースによって生成されることをEFに伝える唯一の方法です。

2) Since ID follows the naming convention for an identity/primary key, I thought would be unnecessary. Why do I get an error if I omit the annotation?

通常、EF規則では整数型のPKの識別情報を意味することは事実です。同時に、テーブルにはID列が1つしか定義されていない(おそらく間違っている)と仮定しているため、他の列をIDとして明示的にマークすると、デフォルトの規則は適用されません。 PK。

関連する問題