2011-08-08 21 views
8

Acabo de actualizar a la última versión de código EF 4.1 usando NuGet y ahora recibo un error con respecto a mi asignación.EF 4.1 EntityType no tiene clave - compuesto

tengo esta clase

public class UserApplication 
{ 
    [Key, Column(Order = 0)] 
    [DatabaseGenerated(DatabaseGeneratedOption.None)] 
    public int UserId { get; set; } 

    [Key, Column(Order = 1)] 
    [DatabaseGenerated(DatabaseGeneratedOption.None)] 
    public int ApplicationId { get; set; } 

    [ForeignKey("ApplicationId")] 
    public virtual Application Application { get; set; } 

    public DateTime SubscribedDate { get; set; } 
} 

Y yo estoy recibiendo este error:

System.Data.Edm.EdmEntityType: : EntityType 'UserApplication' has no key defined. Define the key for this EntityType. 
System.Data.Edm.EdmEntitySet: EntityType: EntitySet 'UserApplications' is based on type 'UserApplication' that has no keys defined. 

que sin embargo puede hacer que funcione con la API de Fluido como esto

modelBuilder.Entity<UserApplication>().HasKey(obj => new {obj.UserId, obj.ApplicationId }); 

Cómo llegar EF no recoge la clave compuesta que he definido usando anotaciones? Estoy bastante seguro de que esto solía funcionar con un EF 4.1 anterior.

+0

que tienen el mismo problema que tú ¿alguna vez encontrar una solución – Pandincus

+0

no, no lo hice al final decidí definir todas las llaves utilizando el DbModelBuilder – kfuglsang

+0

mismo problema, la parte divertida es que tengo dos clases con clave compuesta, una compila, la otra no ... –

Respuesta

1

Funciona con Entity Framework 6.1.3. También he añadido una clase básica Application, sino que se utiliza la UserApplication como es (a excepción de DatabaseGenerat ed Esta opción SQL se generó:..

CREATE TABLE [dbo].[UserApplication] (
    [UserId] [int] NOT NULL, 
    [ApplicationId] [int] NOT NULL, 
    [SubscribedDate] [datetime] NOT NULL, 
    CONSTRAINT [PK_dbo.UserApplication] PRIMARY KEY ([UserId], [ApplicationId]) 
) 


CREATE TABLE [dbo].[Application] (
    [ApplicationId] [int] NOT NULL IDENTITY, 
    [Name] [nvarchar](max), 
    CONSTRAINT [PK_dbo.Application] PRIMARY KEY ([ApplicationId]) 
) 
2

he resuelto el problema Acabo de añadir adicional columnas fundamentales:.?..

public class AlbumUser 
{ 
    public Album Album 
    { 
     get; 
     set; 
    } 

    public IdentityUser User 
    { 
     get; 
     set; 
    } 

    [Key] 
    [Column(Order = 0)] 
    [StringLength(128)] 
    public string UserId 
    { 
     get; 
     set; 
    } 

    [Key] 
    [Column(Order = 1)] 
    public int AlbumId 
    { 
     get; 
     set; 
    } 
} 
+1

No estoy seguro de que esto realmente responda la pregunta. –

Cuestiones relacionadas