39

tengo esta clase y tabla:usando GUID como PK con el Código EF4 Primera

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

el problema es que cuando intento para guardar la nueva foo el primero va con el 0000- 000-00 ... id y el segundo también, entonces obtengo la excepción de restricción

¿Alguien sabe una solución?

Respuesta

71

¿Has configurado Identity StoreGeneratedPattern?
Puede hacerlo en el método OnModelCreating:

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

o utilizando el DataAnnotation atributos:

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

Gracias, muchas gracias !!!!! – Omu

16

Sólo sobre la base de la solución de Devart, tuve este problema y utilizar el

[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 

anotación de datos no funcionó. La razón de esto fue que estaba usando (como se sugiere en uno de los primeros tutoriales de código) una base de datos SqlServerCompact que no admite Guid como identidad. Solo pensé en publicar aquí en caso de que alguien más tuviera este problema. Si cambia la cadena de conexión para que esté creando un SqlServer mdf en lugar de una base de datos Compact, funciona perfectamente.

+0

¿Qué versión de la Edición Compacta y EF usabas? Parece correcto con CE 4.0 y EF 6. ¿Se resolvió esto en versiones posteriores de CE? – mack

+0

@mack probablemente se ha resuelto entonces, mi publicación fue hace un par de años :) – Manatherin

+0

@Manatherin Me enfrento a este problema ahora en VS2013 Actualización 2 con EF 6.1.0. –

Cuestiones relacionadas