【问题标题】:How to use AutoMapper with Entity Framework Database First approach如何将 AutoMapper 与 Entity Framework Database First 方法一起使用
【发布时间】:2014-10-24 05:23:30
【问题描述】:

我正在开发 MVC 5,采用 Db First Approach 的实体框架。每当我使用

public class Customer
{
    [Required]
    public virtual string CustomerID { get; set; }

    [Required]
    [StringLength(15)]
    public virtual string CompanyName { get; set; }

    public virtual string Address { get; set; }

    public virtual string City { get; set; }

    public virtual string PostalCode { get; set; }

    [Country(AllowCountry="USA")]
    public virtual string Country { get; set; }

    [Phone]
    public virtual string Phone { get; set; }
}

对于 Entity Framework 生成的类中的验证,如果我更新我的 .edmx 文件,我会丢失我编写的所有代码。有人建议我使用自动映射器。我试图找到一些基本的例子,但我没有得到。引导我。如何开始和从哪里开始?我是 MVC 实体框架的新手。

【问题讨论】:

  • Chris Pratt 有几篇很好的文章 here 可能会帮助您入门
  • 给你的视图模型添加注解而不是生成代码,使用automapper在两者之间传输数据。

标签: c# asp.net-mvc entity-framework automapper ef-database-first


【解决方案1】:

即使您更新模型,还有另一种方法可以保留验证属性代码。 在 Models 文件夹中,添加一个名为 Metadata.cs 的类(包含所有验证属性的类)。

using System;
using System.ComponentModel.DataAnnotations;

namespace YourProjectName.Models
{
    public class CustomerMetadata
    {
        [Required]
        public virtual int CustomerId { get; set; }

        [Required]
        [StringLength(15)]
        public virtual string CompanyName { get; set; }

        
    }
}

接下来,您必须将模型类与元数据类关联起来。为此,在 Models 文件夹中,添加一个名为 PartialClasses.cs 的类。

using System;
using System.ComponentModel.DataAnnotations;

namespace YourProjectName.Models
{
    [MetadataType(typeof(CustomerMetadata))]
    public partial class Customer
    {
    }
}

Source

【讨论】:

  • 虽然这是可以接受的,但视图通常只涉及编辑模型数据的子集,或者需要其他属性(SelectLists 用于生成下拉列表等),因此创建视图模型并从数据模型映射通常是更好的方法
猜你喜欢
  • 1970-01-01
  • 2011-10-25
  • 1970-01-01
  • 2019-09-02
  • 1970-01-01
  • 2011-03-18
  • 1970-01-01
  • 2013-04-19
  • 2011-06-27
相关资源
最近更新 更多