Как я могу сделать имя столбца ВСЕ ЗАГЛАВНЫМИ при сопоставлении со свойством, которое использует сложный тип?

Я использую EF 4.3 и использую базу данных Oracle. Из-за того, как EF генерирует SQL для базы данных Oracle, а также из-за того, что EF 4.3 не позволяет добавлять пользовательские соглашения, мне приходится вручную указывать имена столбцов для каждого свойства ВСЕМИ ЗАГЛАВНЫМИ БУКВАМИ.

[Column("MYPROPERTY")]
public string MyProperty { get; set; }

Итак, что я могу сделать со свойствами, использующими сложные типы? У меня есть следующий сложный тип:

public class Minute {
    public int Value { get; set; }
}

и следующий DbContext:

public class MyDbContext : DbContext {
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.ComplexType<Minutes>().Property(x => x.Value);
    }
}

И моя сущность:

[Table("MYENTITY")]
public class MyEntity {
    [Column("MYPROPERTY")]
    public string MyProperty { get; set; }
    [Column("MYMINUTES")] //this does nothing
    public Minutes MyMinutes { get; set; }
}

В сгенерированном SQL свойство MyMinutes сопоставляется с несуществующим "Extent1"."MyMinutes_Value"... Я хотел "Extent1"."MYMINUTES".

Что мне здесь делать, кроме как биться головой о стол?


person Byron Sommardahl    schedule 20.06.2012    source источник
comment
Это странно - я использую EF с Oracle и не нужно указывать вручную   -  person m.edmondson    schedule 21.06.2012


Ответы (1)


Ответ довольно прост, но не очень хорошо документирован. Насколько я знаю, это невозможно сделать с помощью атрибутов. Добавьте строку в метод OnModelCreating контекста данных:

public class MyDbContext : DbContext {
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.ComplexType<Minutes>().Property(x => x.Value);
        modelBuilder.Entity<MyEntity>().Property(x => x.MyMinutes.Value).HasColumnName("MYMINUTES");
    }
}

Итак, первая строка в методе вообще устанавливает сложный тип. Вторая строка сообщает EF, как конкретно сопоставить свойство с классом MyEntity. Виола!

person Byron Sommardahl    schedule 21.06.2012