web-dev-qa-db-ja.com

EF4コードファーストでPKとしてGuidを使用

私はこのクラスとテーブルを持っています:

public class Foo
{
public Guid Id {get;set;}
public string Name {get;set;}   
}

create table Foo
(
id uniqueidentifier primary KEY DEFAULT (newsequentialid()),
name nvarchar(255)
)

問題は、新しいfooを保存しようとすると、最初のfooが0000-000-00 ... idになり、2番目のfooも保存されるため、制約例外が発生することです。

誰かが修正を知っていますか?

39
Omu

Identity StoreGeneratedPatternを設定しましたか?
OnModelCreatingメソッドで実行できます。

modelBuilder.Entity<Foo>().Property(o => o.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

またはDataAnnotation属性を使用します。

public class Foo {
  [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
  public Guid Id {get;set;}
  public string Name {get;set;}
}
71
Devart

Devartのソリューションに基づいて構築しただけで、この問題が発生し、

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]

データ注釈が機能しませんでした。この理由は、(コードの最初のチュートリアルの1つで提案されているように)GuidをIDとしてサポートしていないSqlServerCompactデータベースを使用していたためです。他の誰かがこの問題を抱えている場合に備えて、ここに投稿すると思っただけです。コンパクトデータベースではなくSqlServermdfを作成するように接続文字列を変更すると、完全に機能します。

16
Manatherin