我有一个复杂的对象模型,正在尝试使用FluentAPI进行严格控制。我最后得到的是大块代码,如下所示:
modelBuilder.Entity<Product>().Property(t => t.Category).IsRequired();
modelBuilder.Entity<Product>().Property(t => t.Description).IsOptional();
modelBuilder.Entity<Product>().Property(t => t.Name).IsRequired();
modelBuilder.Entity<Product>().Property(t => t.PricingAnalyst).IsOptional();
modelBuilder.Entity<Product>().Property(t => t.ProductCode).IsRequired();
modelBuilder.Entity<Product>().Property(t => t.ReplacedByProductCode).IsOptional();
modelBuilder.Entity<Product>().Property(t => t.Section).IsOptional();
modelBuilder.Entity<Product>().HasMany<ProductReference>(s => s.References);
modelBuilder.Entity<Product>().HasMany<ProductWeight>(s => s.Weights);
modelBuilder.Entity<Product>().HasMany<ProductDate>(s => s.Dates);
modelBuilder.Entity<Product>().HasMany<ProductNote>(s => s.Notes);
modelBuilder.Entity<Product>().HasMany<Rule>(s => s.Rules);
modelBuilder.Entity<Product>().HasOptional<PriceDetail>(s => s.Pricing);
modelBuilder.Entity<Product>().HasOptional<ProductCosting>(s => s.Costing);
modelBuilder.Entity<Product>().HasMany<Update>(u => u.Updates);
在我看来,modelBuilder.Entity<Product>()
如果我可以做一些能达到的效果,我就可以停止打字太多了
using (modelBuilder.Entity<Product>() p)
{
p.Property(t => t.PricingAnalyst).IsOptional();
...
p.HasMany<ProductReference>(s => s.References);
}
会节省很多精力,但我无法弄清楚如何using
正确构造该语句。这是正确的路吗?如果没有,我该如何简化代码并使其更具可读性?
更新:
根据提供的答案,我在:DbContext
文件中创建了类似于以下内容的块:
{
var rule = modelBuilder.Entity<Rule>();
rule.HasKey(r => r.ID);
rule.Property(r => r.Country).IsRequired();
rule.Property(r => r.Description).IsOptional();
rule.Property(r => r.ReviewDate).IsOptional();
rule.Property(r => r.RuleNumber).IsRequired();
rule.HasMany<Update>(r => r.Updates);
rule.HasMany<Condition>(r => r.Conditions);
}
我选择将每个块用大括号括起来以包含的范围,var
因此我在代码的其他地方没有发生任何复制/粘贴事故。我喜欢这种方式,并且使我的代码可读(至少对我而言,希望对其他人而言)。
听起来就像您只想要:
using (var p = modelBuilder.Entity<Product>())
{
//...
}
但是,这只有在modelBuilder.Entity<Product>()
Implements的结果下才有效IDisposable
。遍历有关该主题的MSDN信息,看起来好像没有。如果没有,您可能可以做得很好:
var p = modelBuilder.Entity<Product>();
//...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句