2012-08-11 19 views
8

Me trataron de crear un contexto de datos en EF5 RC similar a esto:conjuntos de objetos múltiples del mismo tipo

class WordContext : DbContext { 
    public DbSet<Word> PossibleWords { get; set; } 
    public DbSet<Word> UsedWords { get; set; } 
} 

Cuando traté de actualizar la base de datos, recibí una excepción diciendo: conjuntos de objetos de múltiples por tipo no son compatibles. El objeto establece 'PossibleWords' y 'UsedWords' ambos pueden contener instancias de tipo 'TestProject.Word'.

Después de googlear, parece que estructurar un contexto de datos como este no es posible en EF.

Mi pregunta es: ¿Qué es un buen diseño de código para almacenar datos como este?

supongo trivial podría ser algo como:

class WordContext : DbContext { 
    public DbSet<Words> Words { get; set; } 
} 

class Words { 
    public int ID { get; set; } 
    public IList<string> PossibleWords { get; set; } 
    public IList<string> UsedWords { get; set; } 
} 

Pero esto sólo se siente terribles.

Editar: Por supuesto, otra trivial sería utilizar 2 tipos de palabras diferentes, como

clase PossibleWord {...} clase BannedWord {...}

En realidad, ahora que lo lo escribió incluso no se ve tan mal, hmm ...

Edit2:

Sólo en caso de que alguien se encuentra con esto también, te muestro como se resolvió en el final:

class Word { 
    [Key] 
    public string String { get; set; } 
} 
class PossibleWord : Word { } 
class UsedWord : Word { } 

class WordContext : DbContext { 
    public DbSet<PossibleWord> PossibleWords { get; set; } 
    public DbSet<UsedWord> UsedWords { get; set; } 
} 
+2

Gracias por mencionar lo que terminaste usando. –

Respuesta

7

Presumiblemente, intenta representar 2 tablas diferentes en el código original. Consideraría dos clases, UsedWord y PossibleWord, y simplemente les pido a ambos que implementen una interfaz común, por ejemplo: IWord? O más simple, solo tiene un campo bool "IsUsed" en Word, y una tabla/tipo.

+0

jaja sí, ninja'd. De alguna manera, no me pareció correcto hasta que lo escribí. No me deja aceptar tu respuesta hasta 8 minutos más. Muchas gracias :] – user974608

Cuestiones relacionadas