在遵循数据库优先方法时,使用 [NotMapped] 将附加信息传递给视图

Using [NotMapped] to pass additional info to the view, when following Database first approach

我正在开发 asp.net mvc-5 网络应用程序,我使用的是 entity framework 5.0。我映射了我的 SQL 服务器数据库表,它创建了一个 .edmx 文件。现在我想扩展模型 classes 以具有额外的非数据库属性,所以我为我的模型 class 创建了一个部分 class 并且我提供了一个额外的属性如下:-

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Web;

namespace Test.Models
{

    public partial class User
    {
         [NotMapped]
         public string NonDataBaseColumn { set; get; }
    }
}

所以我有这些问题:

  1. 这是通过在部分 classes 中定义附加列来传递附加属性的有效方法吗?
  2. 由于我使用的是数据库优先方法,所以我是否需要添加 [NotMapped] 数据注释,或者 [NotMapped] 仅在遵循代码优先方法时才有效?
  3. 在任何情况下都可以在数据库中自动创建 NotMapped 列(在我的例子中是 NonDataBaseColumn)吗?

is this a valid approach to pass additional attributes, by defining additional columns inside the partial classes?

从技术上讲是这样,但请跟我重复:不要将 Entity Framework 模型用作 MVC 视图模型,并广为宣传。

我仍然不明白为什么几乎每个教程都展示了这种每天都会产生 twenty-odd 此类问题的可怕做法,但这不是应该做的方式。 域模型不是视图模型

这些教程可能会这样做,因为它在 "My first TODO WebApp" 上工作得非常好,所以他们要展示的代码更少,要解释的良好开发实践也更少,让你当它因为任何比这更复杂的东西而可怕地崩溃时,就会变得一团糟。

例如,尝试向实体添加 SelectList 属性 以提供包含数据的下拉列表,然后将数据层提取到 DAL 库中,然后挠头想知道为什么你必须从你的 DAL 中引用 MVC。

另请参阅:ASP.NET MVC: using EF entities as viewmodels?

至于您关于 [NotMapped] 属性的问题:它的作用与它的名称和文档状态完全相同,它导致 属性 它所应用的不映射到数据库列。