使用edmx设计器将实体框架中的列合并为一列

时间:2012-10-05 19:45:34

标签: entity-framework-5 two-columns edmx-designer

我正在使用EntityFramework 5 EDMX设计师,并希望将第一个和第一个结合起来。实体的单个字段值(例如,名称)中的人的姓氏。

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

这还有可能吗?

3 个答案:

答案 0 :(得分:0)

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

如果除了查询之外还需要组合属性,则只需创建实体类的另一部分部分并添加自己的计算属性即可。如果需要组合属性进行查询,请使用模型定义函数。

答案 1 :(得分:0)

我这样做的方法是通过Computed Column,如下所述:

How to make a computed column nullable in 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保湿。这是不可取的!


您还可以尝试此处描述的{{1}}属性实现:Calculated Columns in Entity Framework Code First Migrations

答案 2 :(得分:0)

除非我不理解你的问题,否则我相信我已经完成了一个类似于以下内容的部分课程:

for lyst in labels: 
    # lyst is each list in labels
    for char in lyst:
        # char is the character in that list
        label = Label(... text=char) # everything else in the Label() looks good.
        label.grid(...) # You could use counters for this or use ennumerate()-ask if you need.
        # The continue here was entirely irrelevant.