前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Entity Framework 私有属性映射

Entity Framework 私有属性映射

作者头像
喵叔
发布2020-09-08 16:20:43
4140
发布2020-09-08 16:20:43
举报
文章被收录于专栏:喵叔's 专栏喵叔's 专栏

这篇文章纯属自娱自乐,因为在实际开发中用到私有化属性映射的可能性几乎为0。在EF中默认映射的是具有 public 修饰符的属性,但是如果是 internalprivateprotected 修饰的属性要映射进数据库怎么做呢?下面我们分别来讲解一下。

零、 internal 属性映射

我们先创建代码实体类代码

代码语言:javascript
复制
{
    public int Id { get; set; }
    public string Name { get; set; }
    internal int Age { get; set; }
}

在上面的实体类代码中,我们看到 Age 属性的修饰符是 internal , EF是不会映射 Age 属性的,如果需要EF映射该属性就必须显示指定映射该属性。代码如下:

代码语言:javascript
复制
public class UserMap : EntityTypeConfiguration<User>
{
    public UserMap()
    {
        ToTable("User");
        HasKey(p => p.Id);

        Property(p => p.Age);
    }
}

上面的代码中 Property(p => p.Age);就是显示指定Age属性映射,如果去掉该行代码,EF将不会将 Age 属性映射进数据库。

一、 private 和 protected 属性映射

要让 private 和 protected 属性映射,需要用到部分类。我们将前面的实体类修改一下:

代码语言:javascript
复制
public partial class User
{
   public int Id { get; set; }
   public string Name { get; set; }
   private int Age { get; set; }
}

上面的代码在类上面添加了 partial 关键字(这个关键字就是部分类关键字),并且我们将 Age 属性的修饰符修改为 private,下面我们就来看看如何映射 Age 属性。

  1. 首先我们定义一个User的部分类:
代码语言:javascript
复制
public partial class User
{
    public class PrivatePropertyExtension
    {
        public static readonly Expression<Func<User, int>> expression =
            p => p.Age;
    }
}
  1. 然后再UserMap 类中添加如下代码:
代码语言:javascript
复制
Property(User.PrivatePropertyExtension.expression);

代码完成后,Age 属性将会被映射。protected属性同理。当然,上面第二部的方法我们也可以使用 EF的API 去实现,我们需要在上下文派生类中的 OnModelCreating 中设置将所有非公有属性映射到数据库:

代码语言:javascript
复制
modelBuilder.Types().Configure(p =>
{
    var noPublic = p.ClrType.GetProperties(BindingFlags.NonPublic | BindingFlags.Instance);
    foreach(var d in noPublic)
    {
        p.Property(d).HasColumnName(d.Name);
    }
});
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-07-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 零、 internal 属性映射
  • 一、 private 和 protected 属性映射
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档