2010-07-21 5 views
4

Je jouais avec EntityFramework CTP4 et j'ai décidé de l'appliquer à l'un de mes projets actuels. L'application utilise une base de données SQLServer et une table avec une clé composite. Dites, la table "MyEntity" a "Key1" et "Key2" en tant que clés étrangères (individuellement) et en tant que clé primaire composite.Entity Framework CTP4 et touches composées

J'ai fait une classe de configuration dérivée de EntityConfiguration:

class MyEntityConfiguration : EntityConfiguration<MyEntity> 
{ 
    public MyEntityConfiguration() 
    { 
     HasKey(m => m.Key1); 
     HasKey(m => m.Key2); 
    } 
} 

Puis dans mon DataContext (dérivé de DbContext):

public DbSet<MyEntity> MyEntities { get; set; } 

    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     modelBuilder.Configurations.Add(new MyEntityConfiguration()); 
    } 

Le problème est que lorsque je fais une recherche "MyEntities" pour tous ses enregistrements:

var entities = from e in MyModel.Instance.MyEntities 
       select e; 

Je reçois un résultat vraiment étrange composé du sapin st record répété 18 fois, puis le second répété 18 fois (pour mémoire, ma table compte 36 records).

Je soupçonne que le problème est avec la clé composite car aucune autre entité ne montre ce problème.

Toute aide serait appréciée, merci :)

+0

CTP4? ?? Pourquoi ne pas utiliser la version commerciale? C'est parti! –

+0

Mon mauvais, je voulais dire la fonctionnalité CTP4 qui vient de sortir, qui améliore l'approche Code-First. – DrunkenBeard

+0

EntityConfiguration ressemble à EntityTypeConfiguration dans EF4.1. –

Répondre

6

Je ne l'ai pas testé avec ma base de données actuelle & CTP4 mais CTP3 vous feriez créer une clé composite comme ceci:

HasKey(m => new { m.Key1, m.Key2 }); 
+0

Aussi incroyable que cela puisse paraître, ça a vraiment marché: o J'ai toujours supposé que ce sont des façons différentes de faire la même chose, je suppose que j'avais tort. Merci :) – DrunkenBeard

+0

Glad cela a fonctionné! Ouais ce n'est pas * entièrement * clair comment faire toutes les choses avec le manque de documentation actuellement. – TheCloudlessSky

+0

Juste eu ce problème moi-même et c'est la bonne façon de régler les touches composites. Merci @TheCloudlessSky. NB en utilisant HasKey à plusieurs reprises comme suit: HasKey (m => m.Key1); HasKey (m => m.Key2); ne se souviendra que de la dernière clé réglée. – GenericTypeTea