这是所有的现有DbModelBuilder扩展方法,因为它只是在上面添加流利层兼容,但它也确实会带来一些语法开销。不完全是你要求的,但不涉及支持代码。还没有完全测试此还,但如果你熟悉的语法它应该工作:
// First option - like this better because it has less cruft than multiple Has invocations
var modelBuilder = new DbModelBuilder();
var modelConfiguration = new ModelConfigurator(modelBuilder);
modelConfiguration.Entity<Product>().Has(e => {
e.Property(en => en.Name).IsRequired();
e.Property(en => en.UPC).IsRequired();
e.Property(en => en.Price).IsRequired();
e.Property(en => en.Description).IsRequired();}
);
OR
var modelBuilder = new DbModelBuilder();
var modelConfiguration = new ModelConfigurator(modelBuilder);
modelConfiguration.Entity<Product>().Has(e => e.Property(en => en.Name).IsRequired())
.Has(e => e.Property(en => en.UPC).IsRequired())
.Has(e => e.Property(en => en.Price).IsRequired())
.Has(e => e.Property(en => en.Description).IsRequired());
// continue configuring properties, and creating methods on ModelConfigurator as needed
支持代码:
public class Product{
public string Name {get;set;}
public double Price {get;set;}
public string UPC {get;set;}
public string Description {get;set;}
}
public class ModelConfigurator{
public DbModelBuilder ModelBuilder{get;set;}
public ModelConfigurator(DbModelBuilder modelBuilder){
ModelBuilder = modelBuilder;
}
public EntityConfigurator<TEntity> Entity<TEntity>() where TEntity : class {
var entity = ModelBuilder.Entity<TEntity>();
return new EntityConfigurator<TEntity>(entity);
}
}
public class EntityConfigurator<TEntity> where TEntity : class{
public EntityTypeConfiguration<TEntity> EntityTypeConfiguration {get;set;}
public EntityConfigurator(EntityTypeConfiguration<TEntity> entityTypeConfiguration){
EntityTypeConfiguration = entityTypeConfiguration;
}
public EntityConfigurator<TEntity> Has(Action<EntityTypeConfiguration<TEntity>> a){
a(this.EntityTypeConfiguration);
return this;
}
}
不是我所知道的。你的第一个例子是唯一的方法AFAIK –
我知道使用流利的API链接有一些限制,但不能确切地记得它们是什么。看看这个文档,我看不到任何''的例子。Property'对于一个实体使用两次http://msdn.microsoft.com/en-gb/data/jj591617 – ojhawkins
'resharper templates'想起来 –