私のテーブルには、作成された列と作成された列が含まれています。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>
属性を削除し、CREATED
とCREATED_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
タグを使用して
アム?
ID
は、アイデンティティ/プライマリキーの命名規則に従っているため、<DatabaseGenerated(DatabaseGeneratedOption.Identity)>
は不要と考えました。アノテーションを省略するとエラーが発生するのはなぜですか?
ご協力いただきありがとうございます。