我有一个名为Person
的数据库表,其中包含{id, first_name, last_name}
列。比我有一个名为PersonView
的阅读模型只有两个属性Id
和Nominative
。我有这种类型的映射:
public class PersonViewMapping : EntityTypeConfiguration<PersonView>
{
public PersonViewMapping()
{
this.ToTable("Person", "schema");
this.HasKey(d => d.id);
}
}
在此映射中,我会说将Person.first_name
和Person.last_name
的连接映射到PersonView.Nominative
。
我怎么能这样做?
答案 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;
}
}
}