Наследование CodeFirst EF 4.1 - переименование PK / FK - PullRequest
3 голосов
/ 14 июня 2011

У меня есть два класса, ThreadItem и Inquiry.

public class ThreadItem
{
    [Key]
    public int Id { get; set; }

    public DateTime Created { get; set; }
} 

public class ThreadItemMapping : EntityTypeConfiguration<ThreadItem>
{
    public ThreadItemMapping()
    {
        Property(a => a.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity).HasColumnName("ThreadItemId");
    }
}

[Table("Enquiry")]
public class Enquiry : ThreadItem
{
    public string Comment { get; set;}
}

Теперь это работает, ни одной проблемы.У меня есть таблица [ThreadItem] и таблица [Inquiry].Моя таблица запросов имеет PK / FK, который сопоставлен с ThreadItem, что мне и нужно.Тем не менее, я хотел бы переименовать колонку.

В настоящее время это [ThreadItemId] согласно классу ThreadItemMapping.Я хотел бы переименовать его [EnquiryId].Я понимаю, что его называют [ThreadItemId] имеет смысл, это больше вопрос «возможно ли», если честно.

Есть идеи?

Приветствия, D

1 Ответ

2 голосов
/ 14 июня 2011

http://msdn.microsoft.com/en-us/library/gg197525%28v=vs.103%29.aspx

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

Однако, если вы используете соглашения Fluent-API, это довольно просто.

Ваши определения POCO:

public class BaseClass
{
    public int Id {get; set;}
}

public class DerivedClass : BaseClass
{
    public string Data {get; set;}
}

Конфигурирование сопоставлений с БД:

public class BaseConfiguration : EntityTypeConfiguration<BaseClass>
{
    public BaseConfiguration()
{
    HasKey(k => k.Id);
    Property(p => p.Id).HasColumnName("Id").HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity).IsRequired();
}
}

public class DerivedConfiguration : BaseConfiguration
{
    public DerivedConfiguration()
{
    Property(p => p.Id).HasColumnName("BaseClassId");
}
}

, складывающих все вместе

public class MyContext : DbContext
{
    public MyContext(string connectionString) : base(connectionString)
{
    Database.SetInitializer<MyContext>(null);
}

public DbSet<BaseClass> Bases { get; set; }
public DbSet<DerivedClass> Deriveds { get; set; }

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Configurations.Add(new BaseConfiguration());
    modelBuilder.Configurations.Add(new DerivedConfiguration());
}
}

Таким образом, вы создаете экземпляр MyContext, передающий строку подключения, и конфигурации сообщают EF, как обращаться с таблицами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...