我知道这个问题已被提出/回答,但我找不到它的生命。
我正在创建带有现有数据库的ASP.NET MVC 3应用程序,但是想先代码,所以我使用了EF Power Tools CTP1让我入门。最终,我将重构一个更好的解决方案,但为了开始,我使用MVCScaffolding
生成控制器和视图。我正在努力在我的模型上创建显示值(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
映射,或者我是以完全错误的方式进行此操作?
答案 0 :(得分:2)
不可以创建FullName
映射。但是你可以使用这个简单的解决方法:
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
顺序排序或搜索 - 您仍必须使用{{1} }和FirstName
)。
如果您使用新Power Tools的代码生成功能,您应该按照@Steve Mallory的建议在单独的分部类中声明此属性 - 如果您想要重新生成它,请不要修改生成的代码。
答案 1 :(得分:1)
我不会在数据库中映射该字段。相反,我会将我的POCO声明为部分。在另一个文件中,我会有相同的分部类并在那里定义组合值(只有一个getter)。如果需要,我会提供示例代码。
将它保存在单独的文件中有助于您以后进行任何代码生成。