2010-07-21 2 views
4

Я играл с EntityFramework CTP4 и решил применить его к одному из моих текущих проектов. Приложение использует базу данных SQLServer и есть одна таблица с составным ключом. Скажем, таблица «MyEntity» имеет «Key1» и «Key2» как внешние ключи (индивидуально) и как составной первичный ключ.Entity Framework CTP4 и составные клавиши

Я сделал класс конфигурации, полученный из EntityConfiguration:

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

Тогда в моих DataContext (производный от DbContext):

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

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

Проблема заключается в том, что когда я запрашиваю "MyEntities" для всех его записей:

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

Я получаю действительно странный результат, состоящий из пихты запись повторялась 18 раз, затем вторая повторялась 18 раз (для записи у меня в таблице 36 записей).

Я подозреваю, что проблема связана с составным ключом, поскольку никакая другая сущность не показывает эту проблему.

Любая помощь будет признателен, спасибо :)

+0

CTP4? ?? Почему бы не использовать версию выпуска? Это из! –

+0

Мой плохой, я имел в виду только что выпущенную функцию CTP4, которая улучшает подход Code-First. – DrunkenBeard

+0

EntityConfiguration выглядит как EntityTypeConfiguration в EF4.1. –

ответ

6

Я не проверял это с моей текущей базы данных & CTP4 но в CTP3 вы бы создать составной ключ, как это:

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

Как невероятно, как это звучит, это действительно сработало: o Я всегда предполагал, что это разные способы сделать то же самое, думаю, я был неправ. Спасибо :) – DrunkenBeard

+0

Рад, что это сработало! Да, это не совсем * ясно, как делать все с отсутствием документации в настоящее время. – TheCloudlessSky

+0

Как раз эта проблема была сама, и это правильный способ установки составных клавиш. Спасибо @ TheCloudlessSky. NB. используя HasKey несколько раз: HasKey (m => m.Key1); HasKey (m => m.Key2); будет помнить только последний ключ, который был установлен. – GenericTypeTea

Смежные вопросы