zoukankan      html  css  js  c++  java
  • Entity Framework 私有属性映射

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

    零、 internal 属性映射

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

    {
        public int Id { get; set; }
        public string Name { get; set; }
        internal int Age { get; set; }
    }
    

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

    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 属性映射,需要用到部分类。我们将前面的实体类修改一下:

    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的部分类:
    public partial class User
    {
        public class PrivatePropertyExtension
        {
            public static readonly Expression<Func<User, int>> expression =
                p => p.Age;
        }
    }
    
    1. 然后再UserMap 类中添加如下代码:
    Property(User.PrivatePropertyExtension.expression);
    

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

    modelBuilder.Types().Configure(p =>
    {
        var noPublic = p.ClrType.GetProperties(BindingFlags.NonPublic | BindingFlags.Instance);
        foreach(var d in noPublic)
        {
            p.Property(d).HasColumnName(d.Name);
        }
    });
    
  • 相关阅读:
    关键字,保留字
    20181024
    php连接mysql数据并查询
    java 字符串的json格式数据转换成Map集合
    IntelliJ IDEA的一些快捷键
    Java的反射机制简述
    java主函数知识
    单例设计模式---懒汉式的多线程安全隐患
    java的单例设计模式(对象的延时加载)考试专用
    java的单例设计模式
  • 原文地址:https://www.cnblogs.com/gangzhucoll/p/12778186.html
Copyright © 2011-2022 走看看