Entity Framework 私有属性映射

简介: Entity Framework 私有属性映射

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


零、 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;
    }
}

2. 然后再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);
    }
});
目录
相关文章
|
5月前
|
存储 SQL API
【Entity Framework】EF中实体属性
【Entity Framework】EF中实体属性
45 0
|
5月前
|
SQL 开发框架 缓存
【Entity Framework】 EF中DbContext类详解
【Entity Framework】 EF中DbContext类详解
157 0
|
数据库 C#
Entity Framework 简单属性映射
Entity Framework 简单属性映射
1097 0
Entity Framework 简单属性映射
|
API 数据库
Entity Framework复杂类型属性映射
Entity Framework复杂类型属性映射
147 0
Entity Framework复杂类型属性映射
|
SQL C# 数据库
Entity Framework 继承映射
Entity Framework 继承映射
189 0
Entity Framework 继承映射
|
数据库 C#
Entity Framewor简单属性映射
Entity Framewor简单属性映射
101 0
Entity Framewor简单属性映射
|
存储 数据库
Entity Framework 多对多映射
Entity Framework 多对多映射
144 0
Entity Framework 多对多映射
|
存储 API 数据库
Entity Framework 约定
Entity Framework 约定
143 0
|
弹性计算 数据格式
.NET CORE 中用AutoMapper将实体转Dto
在开发过程中,经常会碰到数据实体对象(Entity)和数据传输对象(Dto)的转换,手写代码太烦太LOW,可以用 AutoMapper 按规则自动转换。
803 0
|
数据库
一起谈.NET技术,在Entity Framework 4中映射现有实体类(POCO)
  Entity Framework的全称是ADO.NET Entity Framework,是微软开发的基于ADO.NET的ORM(Object/Relational Mapping)框架。   Entity Framework的主要特点:   1. 支持多种数据库(Microsoft SQL Server, Oracle, and DB2);   2. 强劲的映射引擎,能很好地支持存储过程;   3. 提供Visual Studio集成工具,进行可视化操作;   4. 能够与ASP.NET, WPF, WCF, WCF Data Services进行很好的集成。
1053 0
下一篇
无影云桌面