CodeFirst EF 4.1继承 - 重命名PK/FK
我有两个类,ThreadItem和Inquiry。CodeFirst EF 4.1继承 - 重命名PK/FK
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]表。我的查询表有一个映射到ThreadItem的PK/FK,这是我所需要的。但是,我想重命名该列。
目前它是[ThreadItemId],根据ThreadItemMapping类。我想重新命名它[EnquiryId]。我明白它被称为[ThreadItemId]是有道理的,这实际上更像是一个'可能'的问题。
任何想法?
干杯, d
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");
}
}
把他们放在一起
所以你实例化一个MyContext通过你的连接字符串中并且配置告诉EF如何与表相关联。
嗯,不完全是我想要的,我想重命名为查询表的列,只会有比从ThreadItem继承更多的类。 – 2011-06-14 13:11:31
对不起,你是对的,我打错了桌子 - 但原理是一样的。 – 2011-06-14 13:12:44
嗯。你知道我在配置上更好。在配置文件设置中(我认为它更强大),你可以使用Property(p => ThreadItemId = p.Id);覆盖列名称。 – 2011-06-14 13:17:33
有趣的问题! EF 4.0实际上支持在Table-Per-Type继承中将任意列名映射到基类的key属性。 (你甚至可以在设计器中映射它。)但是它看起来DbContext API没有选项来配置这个场景。键列名称在所有派生类中必须相同。据我可以看到至少... – Slauma 2011-06-14 17:04:20