NotMapped 属性
通过 Code-First 约定,实体框架为每个公共属性创建一个列,该列具有受支持的数据类型并且同时具有 getter 和 setter。 [NotMapped] 注释必须应用于我们不希望数据库表中的列的任何属性。
我们可能不希望存储在数据库中的属性的示例是学生的姓氏,基于他们的名字和姓氏。这可以在运行中计算,不需要将其存储在数据库中。
public string FullName => string.Format("{0} {1}", FirstName, LastName);
在全名属性只有一个 getter 和没有 setter,因此默认情况下,实体框架将不为它创建一个列。
我们可能不想存储在数据库中的另一个属性示例是学生的 AverageGrade
。我们不希望按需获得 AverageGrade; 相反,我们可能在别处计算它。
[NotMapped]
public float AverageGrade { set; get; }
AverageGrade
必须标记为 [NotMapped] 注释,否则 Entity Framework 将为其创建一个列。
using System.ComponentModel.DataAnnotations.Schema;
public class Student
{
public int Id { set; get; }
public string FirstName { set; get; }
public string LastName { set; get; }
public string FullName => string.Format("{0} {1}", FirstName, LastName);
[NotMapped]
public float AverageGrade { set; get; }
}
对于上面的实体,我们将在 DbMigration.cs
中看到
CreateTable(
"dbo.Students",
c => new
{
Id = c.Int(nullable: false, identity: true),
FirstName = c.String(),
LastName = c.String(),
})
.PrimaryKey(t => t.Id);
并在 SQL Server Management Studio 中