Code First EF 4.1继承 - 重命名PK / FK

时间:2011-06-14 13:04:38

标签: c# entity-framework-4.1

我有两个类,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 个答案:

答案 0 :(得分:2)

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如何与表关联。