【问题标题】:How to override Entity Framework entity get method ?如何覆盖实体框架实体获取方法?
【发布时间】:2015-10-22 10:41:11
【问题描述】:

我正在做这样的事情:

List<Employees> employees = DB_Context.Employees.Where(p => p.id == empId).ToList();

具有属性:

身份证

名字

姓氏

地址

我想覆盖 Address ,并在真实地址之前添加一些文本, 例如文本:Client's address

如何返回字符串Client's address + 地址属性

?

【问题讨论】:

  • 你不能覆盖实体框架

标签: c# .net entity-framework visual-studio visual-studio-2013


【解决方案1】:

为此,您不想“覆盖实体框架”,您需要一个投影。在 LINQ 中,您使用 Select() 进行项目:

var employees = context.Employees
                       .Where(p => p.id == empId)
                       .Select(e => new Employee
                       {
                           ID = e.ID,
                           FirstName = e.FirstName,
                           LastName = e.LastName,
                           Address = "Client address: " + e.Address
                       })
                       .ToList();

您还可以公开非映射属性并指示您的同事使用该属性:

public class Employee
{
    // Other properties

    [NotMapped]
    public string ClientAddress
    {
        get
        {
            return "Client address: " + Address;
        }
    }
}

【讨论】:

  • 我不希望这样,如果有人会编写一个新函数(其他函数)会发生什么? Client address: 字符串不会出现!
  • 是的,所以你没有正确描述你的问题(阅读How to Ask),你试图在错误的级别上解决这个问题。要么在数据库视图中解决这个问题,要么向代码的用户公开一个方法而不是整个 DbContext。
  • @CodeCaster:我描述得很完美,人们只是不明白。
  • 如果没有人听懂说话的人,也许有人有问题? :)
  • @CodeCaster:谢谢,不过,我知道如何扩展一个属性,但我不能使用另一个属性。我需要使用映射属性,这就是我明确要求的原因 - Override。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多