[英]Entity Framework 5 code-first configuration encapsulation
我想知道(并且我讨厌使用“最佳实践”一词),但这是一种实现配置的好方法,因为它封装了AAA的配置?
我看到很多例子,其中OnModelCreating
是创建数据库的大量指令说明,而长方法则告诉我某些事情不是很安静。
public class MyContext : DbContext
{
public MyContext() : base("name=MyDb") { }
public DbSet<AAA> AAAs { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Configurations.Add(new AAA.Configuration());
}
}
而带有它的配置的类
public class AAA
{
[Key]
public int Id { get; set; }
[Required]
public string Details { get; set; }
internal class Configuration : EntityTypeConfiguration<AAA>
{
public Configuration()
{
// Set all the funky stuff here
}
}
}
我知道可能没有一种正确的办法 。 在我花很多时间和眼泪之前,我正在寻找一个原因,为什么这可能绝对是世界上最糟糕的想法,或者是否有办法做类似的事情?
编辑
一位同事建议将此作为使用静态属性的替代方法
public class AAA
{
[Key]
public int Id { get; set; }
[Required]
public string Details { get; set; }
public static EntityTypeConfiguration<AAA> Configuration
{
get { return new AAAConfiguration(); }
}
}
internal class AAAConfiguration : EntityTypeConfiguration<AAA>
{
public AAAConfiguration()
{
// Set all the funky stuff here
}
}
我喜欢它,因为它使我在配置实例方面更具灵活性。
这取决于。 到目前为止,我已经足够说我不在乎数据库生成了。 它很好,并且具有我不在乎的优点(与平台无关)。 它限制了不能完全使用SQL Server,因此又回到了数据库项目。
这是一个折衷的世界,而且-抱歉-最佳实践带有很多限制。
我个人认为您采用的方法没有问题。 我最近刚刚解决了一个类似的难题,唯一的区别是我在数据层内部而不是模型内部拥有EntityTypeConfiguration<T>
类。 我也在这些映射类中完成所有映射逻辑。 这意味着我不必用EF特定的属性来修饰我的模型,而使它们完全没有持久性。
使用您的方法,在OnModelCreating
方法中,每个类只需要保留一行即可持久化,而且如果您不清除EF创建的缓存,则只需单击此代码一次,因此,这只是一种-引导程序,因此长方法不是问题吗?
我认为您的方法很好,但是我敢肯定,在这个问题上会有一些不同的看法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.