3

我正在使用 EntityFramework 5 EDMX 设计器,并希望将一个人的名字和姓氏组合成实体上的单个字段值(例如名称)。

我认为在以前的版本中有一种方法可以做到这一点,但我没有看到任何可以做我需要做的事情。

这还有可能吗?

4

3 回答 3

1

除非我不理解您的问题,否则我相信我已经使用类似于以下内容的部分类做到了这一点:

    public partial class person
    {
        public string name { 
            get
            {
                return firstname + " " + lastname;
            }
            set{ }
        }
    }
于 2016-07-06T17:16:02.257 回答
0

我这样做的方式是通过Computed Column这里解释的:

如何在 SQL Server 中使计算列可以为空

如果您使用计算列,您将能够在 LINQ 查询中使用这样的列。例如:

var users = Database.Users.Where(u => u.FullName.ToLower().Contains("string"));

您不会收到“ LINQ to Entities 中不支持”之类的错误,因为此属性实际上是模型对象的一部分。所有繁重的工作都发生在数据库端。

当然,您可以将FullName属性放在部分类中并使用它。

public string FullName 
{
    get { return string.Format("{0} {1}", FirstName, LastName); }
}

在这种情况下,您必须先调用.ToList()( Database.Users.ToList();) 才能在 LINQ 查询中使用此属性。.ToList()将水合/带入你Users的记忆。这是不可取的!


您还可以尝试FullName此处描述的属性实现:Entity Framework Code First Migrations 中的计算列

于 2012-10-05T21:19:11.503 回答
0

不,这是不可能的。您可以创建模型定义的函数并在查询中使用它,但它仍然不是您实体的一部分。如果您的实体是只读的,您可以使用组合列创建数据库视图并将其映射而不是表 - 它还显示了将列组合成单个属性不是那么容易的主要原因。读取过程中的自动连接很容易,但自动分解以将正确的值保存到正确的列中很难并且容易出错。

如果您需要组合属性而不是查询,您可以简单地创建实体类的另一个部分并添加您自己的计算属性。如果您需要组合属性进行查询,请使用模型定义的函数。

于 2012-10-05T20:20:30.023 回答