资讯专栏INFORMATION COLUMN

Entity Framework 私有属性映射

cjie / 2573人阅读

摘要:代码如下上面的代码中就是显示指定属性映射,如果去掉该行代码,将不会将属性映射进数据库。一和属性映射要让和属性映射,需要用到部分类。

这篇文章纯属自娱自乐,因为在实际开发中用到私有化属性映射的可能性几乎为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
{
    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 属性。

首先我们定义一个User的部分类:

public partial class User
{
    public class PrivatePropertyExtension
    {
        public static readonly Expression> expression =
            p => p.Age;
    }
}

然后再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);
    }
});

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/61665.html

相关文章

  • Entity Framework 私有属性映射

    摘要:代码如下上面的代码中就是显示指定属性映射,如果去掉该行代码,将不会将属性映射进数据库。一和属性映射要让和属性映射,需要用到部分类。 这篇文章纯属自娱自乐,因为在实际开发中用到私有化属性映射的可能性几乎为0。在EF中默认映射的是具有 public 修饰符的属性,但是如果是 internal 、 private 和 protected 修饰的属性要映射进数据库怎么做呢?下面我们分别来讲解一...

    huashiou 评论0 收藏0
  • Entity Framework 继承映射

    摘要:一是常用的策略,通过外键来表示继承,父类和子类分别位于不同的表中,子类表包含自身属性列和父类表的外键,并将父表的外键作为子类表的主键。与父类的多态关联将被表示为引用父类表的外键。 继承是面向对象开发时经常用到的,但是SQL Server 数据库不具备继承,那么怎么办能?我们可以利用如下三种方法: TPH(Table per Hierachy):对SQL架构进行非规范化来表示多态,使用...

    宋华 评论0 收藏0
  • Entity Framework 继承映射

    摘要:一是常用的策略,通过外键来表示继承,父类和子类分别位于不同的表中,子类表包含自身属性列和父类表的外键,并将父表的外键作为子类表的主键。与父类的多态关联将被表示为引用父类表的外键。 继承是面向对象开发时经常用到的,但是SQL Server 数据库不具备继承,那么怎么办能?我们可以利用如下三种方法: TPH(Table per Hierachy):对SQL架构进行非规范化来表示多态,使用...

    microelec 评论0 收藏0
  • Entity Framework 一对多关系映射

    摘要:中关系映射也是一个很关键的内容,关系映射和属性映射一样,也是在中配置映射。一个客户可以有多个订单,但一个订单只能属于一个客户,所以我们用到了中的,一个客户又存在多个订单,因此也使用到了同时表中有作为外键,因此我们用到了。 EF中关系映射也是一个很关键的内容,关系映射和属性映射一样,也是在 OnModelCreating 中配置映射。EF中的关系映射有如下三种: One-to-Many...

    Anshiii 评论0 收藏0
  • Entity Framework 一对多关系映射

    摘要:中关系映射也是一个很关键的内容,关系映射和属性映射一样,也是在中配置映射。一个客户可以有多个订单,但一个订单只能属于一个客户,所以我们用到了中的,一个客户又存在多个订单,因此也使用到了同时表中有作为外键,因此我们用到了。 EF中关系映射也是一个很关键的内容,关系映射和属性映射一样,也是在 OnModelCreating 中配置映射。EF中的关系映射有如下三种: One-to-Many...

    geekidentity 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<