【问题标题】:How to enable mapping the private property of the entity如何启用映射实体的私有属性
【发布时间】:2013-02-18 14:37:09
【问题描述】:

一开始我不得不对我的英语说声抱歉。

我正在使用 EntityFramework 和代码优先方式。我脑子里只有一个想法,但我不知道如何使它成为现实。我不是编程的初学者,但我一直在使用流畅的 NHibernate。

我有一个实体:

public class User
{
    [Key]
    public Int32 Id { get; set; }
    public String Name { get; set; }
    // This property should be mapped on DB
    private String Surname { get; set; }

    // This one shouldn't be mapped
    public String GetSurname { get { return Surname; } set { Surname = "SomePrefix." + value; }   }
}

问题1.如何映射实体的私有属性?

我无法在上下文中的 OnModelCreating() ovverride 中访问此私有属性。

问题 2. 如何禁用一个公共属性的映射?

作为我想要得到的结果: 当我尝试设置姓氏时,我会在开头添加前缀。

【问题讨论】:

    标签: c# .net entity-framework


    【解决方案1】:

    实体框架不提供映射私有属性的方法,因为它需要读取/写入值到它们,因此它必须至少有一个公共的属性获取/设置。

    在回答您的第二个问题时,您可以使用模型构建器(我喜欢如下描述映射的方式)

    modelBuilder.Entity<User>().Ignore(u=>u.GetSurname);
    

    或添加属性

    [NotMapped]
    private String Surname { get; set; }
    

    【讨论】:

    • 谢谢你的答案。但是第一个问题呢?如何映射私有属性?
    • @maris,不幸的是,您不能将属性设为公开且有获取/设置属性,为什么还要映射私有属性
    • 我想为我的属性添加高级逻辑(获取和设置)。像我想插入数据库的东西不是整个数据而是整个数据+前缀。
    • @maris 所以基本上你想从你的数据模型中屏蔽一些属性到你的应用程序模型中?我的建议是为您的应用程序模型创建第二个类并实现映射器以在您的应用程序和数据模型之间进行转换。这将使您可以按预期将数据映射到数据库,同时仍然可以控制您的应用程序模型。
    • 我知道这种方式。但问题是——“这是正确的方式吗?” ) 但是非常感谢你。让我们 w8 获得任何其他答案,mb 有人会告诉其他答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 2013-06-26
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    相关资源
    最近更新 更多