问题描述
|
我知道这个问题已经被问到/回答了,但是我一生都找不到。
我正在使用现有数据库创建ASP.NET MVC 3应用程序,但想先编写代码,所以我使用EF Power Tools CTP1入门。最终,我将重构为一个更好的解决方案,但为了开始,我使用了ѭ0来生成控制器和视图。我正在努力在模型上创建显示值(
FullName
)属性,该属性是数据库中FirstName
和LastName
列的组合。
我有一堂简单的课
public class Manager
{
public Manager(){}
public int ManagerID { get; set; }
[displayName] // Not in db.. want to populate this from first & last name
public string FullName { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
}
和一个看起来像的映射文件
public ManagerMap()
{
// Primary Key
this.HasKey(t => t.ManagerID);
// Table & Column Mappings
this.ToTable(\"Manager\");
this.Property(t => t.ManagerID).HasColumnName(\"ManagerID\");
this.Property(t => t.FirstName).HasColumnName(\"FirstName\");
this.Property(t => t.LastName).HasColumnName(\"LastName\");
this.Property(t => t.Email).HasColumnName(\"Email\");
this.Property(t => t.FullName).WhatTodo..? //<-- Can I / how does this mapping look
}
}
是否可以创建FullName
映射,或者我将以完全错误的方式进行操作?
解决方法
不可以,无法创建“ 1”映射。但是您可以使用以下简单的解决方法:
public class Manager
{
public Manager(){}
public int ManagerID { get; set; }
[NotMapped]
public string FullName
{
get
{
return FirstName + \" \" + LastName;
}
}
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
}
这种方法的唯一缺点是,您不能在linq-to-entities查询中使用FullName
属性(因此,您不能例如通过FullName
进行订购或搜索-您仍然必须使用FirstName
和LastName
)。
如果您使用新的Power Tools的代码生成功能,则应按@Steve Mallory的建议在单独的部分类中声明此属性-如果要重新生成,请不要修改生成的代码。
,我不会映射数据库中的字段。相反,我会声明我的POCO为部分。在另一个文件中,我将具有相同的局部类,并在那里定义组合值(仅带有吸气剂)。如果您需要,我有示例代码。
如果以后进行任何代码生成,将其保存在单独的文件中将很有帮助。