【发布时间】:2011-08-18 05:37:43
【问题描述】:
我们的团队目前正在开发一个 Web 应用程序,因为我们有一个添加了 Entity Framework .edmx 的类库并生成了 POCO 类。
我们的 Web 应用程序基于 MVC,我们在具有相同名称和属性的模型中定义了我们的类(从 .edmx 复制粘贴 POCO 类)。 .edmx 类库被引用到 MVC Web 应用程序。
视图是 MVC 模型类的强类型。我们使用 MVC 模型进行显示、字符串长度和必需。
在我们的控制器中,当有一个 CRUD 操作时,我们接受 POCO 类类型,例如
public ActionResult Create(EFModels.User user) { }
EFModels.User 是 .edmx(POCO 生成的类)中的一个类,MVC 视图被强类型化为模型,即 MvcWebApplication.Models.User。
问题是我们如何在 ActionResult Create 中从 MvcWebApplication.Models.User(来自 Model)获取数据到 EFModels.User(EF 类)??
我能够获取数据,我知道它是相同的属性名称。我尝试更改类名,但它仍然有效,但如果我们更改属性名,它就不起作用。我无法理解其背后的逻辑。
最初我们不知道它不起作用,我们使用 AutoMapper 将模型类转换为 Edmx POCO 类。
任何想法,谢谢。
问题是我们如何通过任何映射将模型类的值传递给 EF 类。我不需要使用 AutoMapper,无需使用它即可获取值。
看看代码,希望解释得更好...
//POCO类
namespace EFModels
{
using System;
using System.Collections.Generic;
public partial class User
{
public int Id { get; set; }
public string Type { get; set; }
public string Name { get; set; }
}
}
//MVC模型类
namespace MvcWebSamp.Models
{
public class User
{
public int Id { get; set; }
[Display(ResourceType = typeof(BasicTags), Name = "Type")]
[StringLength(15, ErrorMessageResourceName = "TypeLength", ErrorMessageResourceType = typeof(BasicTags))]
[Required(ErrorMessageResourceName = "TypeRequired", ErrorMessageResourceType = typeof(BasicTags))]
public string TypeName { get; set; }
public string Name { get; set; }
public Address Address { get; set; }
}
}
//MVC查看页面
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcWebSamp.Models.User>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
User
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>User</h2>
<% using (Html.BeginForm("Create", "User", FormMethod.Post))
{
%>
<%: Html.ValidationSummary(true) %>
<fieldset>
<legend>User</legend>
<div class="editor-field">
<%: Html.LabelFor(model => model.TypeName) %>
<%: Html.EditorFor(model => model.TypeName)%>
<%: Html.ValidationMessageFor(model => model.TypeName)%>
</div>
<div class="editor-field">
<%: Html.LabelFor(model => model.Name) %>
<%: Html.EditorFor(model => model.Name)%>
<%: Html.EditorFor(model => model.Address.street)%>
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
<% } %>
</asp:Content>
//控制器方法
public ActionResult Create(EFModels.User user)
{
Model1Container con = new Model1Container();
con.Users.Add(user);
con.SaveChanges();
return View("User");
}
当我点击创建按钮时,我发布了 MvcWebSamp.Models.User 类型的数据,并且在创建操作中,我能够在不使用任何 AutoMapper 的情况下获取 EFModels.User 用户类型的数据。我想知道这是怎么回事???
【问题讨论】:
-
你不应该在你的 UI 中使用你的 EF 模型。
标签: c# asp.net-mvc entity-framework c#-4.0 entity-framework-4.1