2016-11-14 6 views
1


私はEF(v6.1)を初めて使用しています。 Code-Firstアプローチを使用しようとしています。
私は、SQLサーバー側(newsequentialid())で生成されるId列を持っていたいと思いますが、これらの値を上書きする機能があります。 マイコード:完璧なSQLになり手動で値を設定できるEF6.1 newsequentialid

[Key, Required, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
public Guid Id { get; set; } 

[Id] [uniqueidentifier] NOT NULL DEFAULT (newsequentialid()) 

しかしEFは単に私がIdプロパティに設定し、SQLにnullを渡す任意の値を無視します。基本的にフォローテストは機能しませんでした。

MyContext context = new MyContext(); 
MyClass item = new MyClass(); 
Guid id = Guid.NewGuid(); 
item.Id = id; 
context.MyTable.Add(item); 
context.MyTable.Create(); 
context.SaveChanges(); 
Assert.AreEqual(item.Id, id); 

私はテストを行うために何をすべきですか?

+1

"MyClass"(別名の下にある)を同じテーブルにマッピングする 'DbContext'サブクラスを' DatabaseGeneratedOption.Identity'なしで作成するだけです。このクラスは、例外的な場合に使用します。 –

答えて

1

手動であなたのGuidIdプロパティを設定したい場合は、DatabaseGenerated属性を削除します。

[Key] 
public Guid Id { get; set; } 

あなたがIdentityとしてあなたPKプロパティを設定した場合、値は、あなたのDB.Alsoに生成されます、あなたはしないでくださいこのプロパティをRequiredとする必要があります.PKプロパティはデフォルトで必須です。

+0

私はそれが99.99%のようなDBによって生成されたいと思っていますが、その動作を無効にする能力が必要です。何か方法はありませんか?上記の列設定で通常のSQLでは、本当に必要な場合は何も私が以下のスクリプトを実行するのを妨げません: 'insert MyTable] (Id) 値 ( '74C17675-6C85-4C79-9C0C-41E1FA4C059D') ' –

+1

さて、私が提案したことをIDとしてその列を無効にし、あとでマイグレーションを使用してDBシーマを変更する必要があります。次に、その行を特定の値で追加し、その列をIDとしてマークし、その列をIDとしてロールバックする別の移行を生成することができます。 – octavioccl

+0

このリンクを参照してください。https://msdn.microsoft.com/ en-us/library/jj591621(v = 117).aspx – octavioccl

関連する問題