HTML5技术

Entity Framework Core 2.0 新特性 - 晓晨Master(2)

字号+ 作者:H5之家 来源:H5之家 2017-08-16 17:01 我要评论( )

1 modelBuilder.EntityProduct () 2 .HasOne(e = e.Details).WithOne(e = e.Product) 3 .HasForeignKeyProductDetails(e = e.Id); ); ); 七.Owned types 一个owned实体类型可以与另一个owned实体类型共享相同的CLR

1 modelBuilder.Entity<Product>() 2 .HasOne(e => e.Details).WithOne(e => e.Product) 3 .HasForeignKey<ProductDetails>(e => e.Id); ); );

 

七.Owned types

  一个owned实体类型可以与另一个owned实体类型共享相同的CLR类型。但是由于它不能被CLR类型识别,所以必须从另一个实体类型导航到它。包含定义导航的实体是所有者。当查询所有者时,默认将包含所属的类型。

  按照惯例,将为所属类型创建一个影子主键,它将通过使用表拆分映射到与所有者相同的表。

示例代码:

1 modelBuilder.Entity<Order>().OwnsOne(p => p.OrderDetails, cb => 2 { 3 cb.OwnsOne(c => c.BillingAddress); 4 cb.OwnsOne(c => c.ShippingAddress); 5 }); Order 8 { Id { get; set; } 10 public OrderDetails OrderDetails { get; set; } 11 } OrderDetails 14 { 15 public StreetAddress BillingAddress { get; set; } 16 public StreetAddress ShippingAddress { get; set; } 17 } StreetAddress 20 { Street { get; set; } City { get; set; } 23 }

 

八.函数映射

  EF支持映射数据库中定义的函数,可以在LINQ查询中使用。

  需要在 DbContext 中定义一个静态方法,并且使用 DbFunctionAttribute 特性。

示例代码:

BloggingContext : DbContext 2 { 3 [DbFunction] PostReadCount(int blogId) 5 { Exception(); 7 } 8 }

   这样的方法是自动注册。一旦注册了方法,您就可以在查询的任何地方使用它。

 要注意的几件事:

九.code first 实体配置

  在EF6可以通过 EntityTypeConfiguraiton 封装特定实体类型的配置代码,在EF Core2.0中,这个特性回来了(EF Core 之前的 core版本不支持)。

示例代码:

1 class CustomerConfiguration : IEntityTypeConfiguration<Customer> 2 { Configure(EntityTypeBuilder<Customer> builder) 4 { 5 builder.HasKey(c => c.AlternateKey); 6 builder.Property(c => c.Name).HasMaxLength(200); 7 } 8 } 9 10 ... builder.ApplyConfiguration(new CustomerConfiguration());

 

十.Pluralization hook for DbContext Scaffolding

  EF Core 2.0 introduces a new IPluralizer service that is used to singularize entity type names and pluralize DbSet names. The default implementation is a no-op, so this is just a hook where folks can easily plug in their own pluralizer.
Here is what it looks like for a developer to hook in their own pluralizer:

MyDesignTimeServices : IDesignTimeServices 2 { ConfigureDesignTimeServices(IServiceCollection services) 4 { 5 services.AddSingleton<IPluralizer, MyPluralizer>(); 6 } 7 } MyPluralizer : IPluralizer 10 { Pluralize(string name) 12 { 13 return Inflector.Inflector.Pluralize(name) ?? name; 14 } Singularize(string name) 17 { 18 return Inflector.Inflector.Singularize(name) ?? name; 19 } 20 }

本人英语水平有限,如有翻译不对的地方,欢迎批评指正。

 

如果你觉得写的不错,请点一下的“推荐”,这是对我分享技术经验的支持,谢谢!

声明:原创博客请在转载时保留原文链接或者在文章开头加上本人博客地址,如发现错误,欢迎批评指正。凡是转载于本人的文章,不能设置打赏功能,如有特殊需求请与本人联系!

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • EntityFramework Core问题处理集锦(一) - Jeffcky

    EntityFramework Core问题处理集锦(一) - Jeffcky

    2017-08-07 11:00

  • 带你快速进入.net core的世界 - 农码一生

    带你快速进入.net core的世界 - 农码一生

    2017-08-07 10:02

  • Entity Framework Core 执行SQL语句和存储过程 - Sweet-Tang

    Entity Framework Core 执行SQL语句和存储过程 - Sweet-Tang

    2017-08-02 08:00

  • .NET Core 成都线下面基会拉开序幕 - Savorboard

    .NET Core 成都线下面基会拉开序幕 - Savorboard

    2017-08-01 10:02

网友点评
)