39

我有這個類和表:使用GUID作爲PK與EF4代碼優先

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) 
) 

的問題是,當我嘗試保存新富第一個進入與0000- 000-00 ... ID和第二也,所以我得到約束例外

有人知道一個修復?

回答

71

您是否設置了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;} 
} 
+1

謝謝,非常感謝你!!!!! – Omu 2011-03-11 09:03:37

16

只是建立在Devart的解決方案,我有這個問題,並使用

[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 

數據註釋不起作用。原因是我正在使用(如代碼第一個教程中的建議)一個SqlServerCompact數據庫,它不支持Guid作爲標識。只是以爲我會在這裏發帖,以防其他人有這個問題。如果您更改連接字符串,以便它創建SqlServer mdf而不是Compact數據庫,則它可以很好地工作。

+0

您使用的是Compact Edition和EF的哪個版本? CE 4.0和EF 6似乎沒問題。在CE的後續版本中解決了這個問題嗎? – mack 2014-01-23 14:01:12

+0

@mack它可能已經解決了,那麼我的帖子是幾年前:) – Manatherin 2014-01-23 19:21:07

+0

@Manatherin我現在面對VS2013更新2與EF 6.1.0中的這個問題。 – 2014-05-21 08:35:36