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 中

StackOverflow 文档