【问题标题】:What is the correct way to define model classes in asp.net?在 asp.net 中定义模型类的正确方法是什么?
【发布时间】:2013-10-27 01:25:43
【问题描述】:

我有使用我创建的数据库选项和模型类的更新生成的实体框架类。我的问题是,如果我有一张名为“car”的桌子和一个名为“car”的模型,以及使用这些的最佳方式是什么?它们应该是同一个类,还是应该使用部分,或者我应该有单独的模型类和单独的类来表示数据库表,你能给我举个例子吗?

【问题讨论】:

标签: asp.net-mvc entity-framework asp.net-mvc-4


【解决方案1】:

我一直将视图模型保存在与实体数据模型不同的类库(具有单独的命名空间)中。这样,如果数据库架构发生变化(几乎总是发生),我不会破坏我的观点。在数据对象和视图模型之间移动数据我更喜欢Automapper。如果您缺少源映射的目标对象上的属性,它甚至会给您单元测试失败,从而帮助您及早发现错误。

【讨论】:

  • 这很有趣,我发现自己正在编写代码来将我的模型类映射到我的实体框架生成的类,但它们本质上包含非常相似的数据,这样做感觉不正确。
  • 在这种情况下,Automapper 可以让您的生活变得更轻松。您可以直接在视图中使用数据模型,但是随着项目的发展,这会使生活变得更加困难。单独模型的另一个优点是,如果您确实需要防止用户修改的属性(例如 IsAdmin),您可以在模型分开时轻松防止用户通过任何类型的 POST 篡改来修改它。如果您直接在视图中使用实体,这种保护会变得更加复杂。
  • 很高兴为您提供帮助。不要忘记accept the answer,这是最有帮助的。
【解决方案2】:

我发现在您的解决方案中专门为数据访问设置一个单独的项目通常是一种很好的做法。

我通常将其设置为类库项目,其结构类似于以下结构。

/ProjectNameData
    /Models/ -- POCO's go here
        /Mapping/ -- EntityTypeConfiguration classes go here
    /Repositories/ -- Repositories go here
    /ProjectContext.cs

然后我将拥有另一个用于服务的类库以及我的主应用程序项目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-11
    • 2015-08-25
    • 1970-01-01
    相关资源
    最近更新 更多