我正在使用 EntityFramework 5 EDMX 设计器,并希望将一个人的名字和姓氏组合成实体上的单个字段值(例如名称)。
我认为在以前的版本中有一种方法可以做到这一点,但我没有看到任何可以做我需要做的事情。
这还有可能吗?
我正在使用 EntityFramework 5 EDMX 设计器,并希望将一个人的名字和姓氏组合成实体上的单个字段值(例如名称)。
我认为在以前的版本中有一种方法可以做到这一点,但我没有看到任何可以做我需要做的事情。
这还有可能吗?
除非我不理解您的问题,否则我相信我已经使用类似于以下内容的部分类做到了这一点:
public partial class person
{
public string name {
get
{
return firstname + " " + lastname;
}
set{ }
}
}
我这样做的方式是通过Computed Column
这里解释的:
如果您使用计算列,您将能够在 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 中的计算列
不,这是不可能的。您可以创建模型定义的函数并在查询中使用它,但它仍然不是您实体的一部分。如果您的实体是只读的,您可以使用组合列创建数据库视图并将其映射而不是表 - 它还显示了将列组合成单个属性不是那么容易的主要原因。读取过程中的自动连接很容易,但自动分解以将正确的值保存到正确的列中很难并且容易出错。
如果您需要组合属性而不是查询,您可以简单地创建实体类的另一个部分并添加您自己的计算属性。如果您需要组合属性进行查询,请使用模型定义的函数。