1

我正在使用 asp.net mvc 4 和实体框架代码优先方法。我有以下实体模型

public class User
{
    public virtual int Id { get; set; }
    public virtual String FirstName { get; set; }
    public virtual String MiddleName { get; set; }
    public virtual String LastName { get; set; }
}

对于我需要显示全名的用户列表视图页面,我正在尝试在用户模型中创建一个仅获取属性,例如

public virtual String FullName{
    get{
        return FirstName + " " + MiddleName + " " + LastName;
    }
}

但我不确定它是否会起作用,此外我也不希望实体框架将其映射到数据库列。

我可以使用从其他属性生成的类似仅获取属性仅用于查看吗?任何人都可以给我任何建议吗?

4

2 回答 2

7

根据您通过 DataAnnotations 或 EntityConfigurationType 类配置域实体的方式,您可以使用 [NotMapped] DataAnnotation

public class User
{
    public virtual int Id { get; set; }
    public virtual String FirstName { get; set; }
    public virtual String MiddleName { get; set; }
    public virtual String LastName { get; set; }
    [NotMapped]
    public virtual String FullName 
    {
        get{
             return FirstName + " " + MiddleName + " " + LastName;
        }
    }
}

或者在实现 EntityTypeConfiguration 的特定类中,您可以像这样将属性设置为被 EntityFramework 忽略,然后在 OnModelCreating 事件中将其添加到您的上下文配置集合中:

public class UserConfiguration : EntityTypeConfiguration<User>
{
    public UserConfiguration()
    {
        Ignore(u=>u.FullName);
    }
}
于 2012-10-04T17:53:25.003 回答
0

如果您因为需要在视图中显示而将这个属性放入模型中,那么您首先就错过了 MVC 的要点。该模型应该以正确描述要使用的数据的方式构建。这可能是也可能不是反映您的数据库结构的实体模型。它也可能正是视图正在寻找的,也可能不是。

在这种情况下,您必须问自己为什么要将它添加到模型中,以及它是否只是代码膨胀。您已经拥有模型中创建此特定字符串所需的信息。如果视图需要以特定格式显示此信息,则它属于视图。但是,如果您知道您每次都需要在其他几个地方以完全相同的格式使用这种精确的逻辑,那么可以认为该属性属于视图,因为它是数据的更具全局性的描述性实现有问题。

鉴于您的具体示例,我认为这个只读属性只是代码膨胀。这种性质的东西属于使用这些数据的视图。

于 2012-10-04T17:49:30.170 回答