我与EF代码第一次尝试,并创建实体Article
: 在子类EF代码第一次实体列
public class Article
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid ArticleId { get; set; }
[Required, MaxLength(50)]
public string Title { get; set; }
public DateTimeRange Published { get; set; }
}
因为会有许多实体需要一个范围,我认为这将是更容易地创建一类DateTimeRange
:
public class DateTimeRange
{
[Required]
public DateTime From { get; set; }
public DateTime? To { get; set; }
}
代码生成工作得很好,这是结果:
CreateTable(
"dbo.Articles",
c => new
{
ArticleId = c.Guid(nullable: false, identity: true),
Title = c.String(nullable: false, maxLength: 50),
Published_From = c.DateTime(nullable: false),
Published_To = c.DateTime(),
})
.PrimaryKey(t => t.ArticleId);
但是,我想要生成没有下划线的列名。我试着给列From
和To
特定名称:
[Required, Column("PublishedFrom")]
public DateTime From { get; set; }
[Column("PublishedTo")]
public DateTime? To { get; set; }
这完美的作品:
PublishedFrom = c.DateTime(nullable: false),
PublishedTo = c.DateTime()
事情是:就像我说的,我想在几个实体,也许用这个甚至在同一实体中多次出现,因此在DateTimeRange
中给出一个固定名称将不起作用。我宁愿只是说能连接没有下划线的名字。 有没有办法做到这一点?
UPDATE
这就是我目前的解决方案,我从链接的帮助下通过virusstorm
[ComplexType]
public class DateTimeRange
{
[Required]
public DateTime From { get; set; }
public DateTime? To { get; set; }
}
,然后提供了,在的DbContext类:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Types<Article>().Configure(config => config.Property(article => article.Published.From).HasColumnName("PublishedFrom"));
modelBuilder.Types<Article>().Configure(config => config.Property(article => article.Published.To).HasColumnName("PublishedTo"));
}
看看代码优先的自定义约定。 –