同一财产上的两列

时间:2015-04-10 16:20:37

标签: entity-framework

我有一个名为Person的数据库表,其中包含{id, first_name, last_name}列。比我有一个名为PersonView的阅读模型只有两个属性IdNominative。我有这种类型的映射:

public class PersonViewMapping : EntityTypeConfiguration<PersonView>
{
    public PersonViewMapping()
    {
        this.ToTable("Person", "schema");
        this.HasKey(d => d.id);
    }
}

在此映射中,我会说将Person.first_namePerson.last_name的连接映射到PersonView.Nominative。 我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

您必须在数据库中构建模型,如果必须保存名字和姓氏,那么实体必须具有这两个属性。所以在你理解的情况下......你需要写下你的课程

 public class PersonView
 {
     public int Id { get; set; }
     public string Firstname { get; set; }
     public string Lastname { get; set; }
     public string Nominative { get { return string.Concat(this.Firstname, " ", this.Lastname); } }
 }

并在您的配置中忽略该属性

public class PersonViewMapping : EntityTypeConfiguration<PersonView>
{
    public PersonViewMapping()
    {
        this.ToTable("Person");
        this.HasKey(d => d.Id);
        this.Property(d => d.Firstname);
        this.Property(d => d.Lastname);
        this.Ignore(d => d.Nominative);
    }
}

答案 1 :(得分:0)

我认为你可以这样做,没有映射,因为你的提名不是你表中的实际字段,也不需要这个映射。

public abstract class Person
{
    public int ID { get; set; }
    [Required]
    [StringLength(50)]
    [Display(Name = "Last Name")]
    public string LastName { get; set; }
    [Required]
    [StringLength(50, ErrorMessage = "First name cannot be longer than 50 characters.")]
    [Column("FirstName")]
    [Display(Name = "First Name")]
    public string FirstMidName { get; set; }
    [Display(Name = "Full Name")]
    public string FullName
    {
        get
        {
            return LastName + ", " + FirstMidName;
        }
    }
}