.net 如何基于从不同程序集的数据库中获取的数据创建MVC模型

.net 如何基于从不同程序集的数据库中获取的数据创建MVC模型,.net,vb.net,entity-framework,asp.net-mvc-4,.net,Vb.net,Entity Framework,Asp.net Mvc 4,我是MVC新手。我正在使用创建一个3层应用程序 数据层(EF5) 业务层(Linq到实体)和 Web应用程序(MVC4) 我创建了一个数据模型(.edmx),并使用Entity framework 5 for oracle 11g 我将所需数据放入业务层的列表中。如下所示 Public Class Customer_Provider Public Function getCustomers() As List(Of Customer) Dim list As New L

我是MVC新手。我正在使用创建一个3层应用程序 数据层(EF5) 业务层(Linq到实体)和 Web应用程序(MVC4)

我创建了一个数据模型(.edmx),并使用Entity framework 5 for oracle 11g

我将所需数据放入业务层的列表中。如下所示

Public Class Customer_Provider
    Public Function getCustomers() As List(Of Customer)

        Dim list As New List(Of Customer)
        Using db As New Entities
            list = (From u In db.Customer Select u).ToList()
        End Using
        Return list
    End Function
End Class
在我的web应用程序中,我添加了所有引用,并使用我的业务层将数据输入MVC控制器

Function Customer() As ActionResult    
        Dim obj As New Customer_Provider()
        Return View(obj.getCustomers())
    End Function
我的问题是如何创建一个模型来访问从obj.GetCustomer()获取的数据,以写入验证并将模型填充到视图中。我试过各种方法,但都做不到。谁能给我推荐一个方法吗

MyView页面

@ModelType IEnumerable(Of MVC_Temp.Customer)
@Code
    ViewData("Title") = "Customer"
    Layout = "~/Views/Shared/_Layout.vbhtml"
End Code

<h2>Customer</h2>
@For Each item In Model
    Dim currentItem = item
    @<tr>
        <td>
            @Html.DisplayFor(Function(modelItem) currentItem.CustomerID)
        </td>
        <td>
            @Html.DisplayFor(Function(modelItem) currentItem.CustomerName)
        </td>
<tr>
NEXT
@ModelType IEnumerable(属于MVC临时客户)
@代码
ViewData(“标题”)=“客户”
Layout=“~/Views/Shared/\u Layout.vbhtml”
结束代码
顾客
@对于模型中的每个项目
当前项目=项目
@
@DisplayFor(函数(modelItem)currentItem.CustomerID)
@DisplayFor(函数(modelItem)currentItem.CustomerName)
下一个

创建一个具有视图所需属性的viewmodel,在那里,您可以添加必要的验证属性。如果您想让您的生活更加轻松,请使用AutoMapper映射viewmodel和模型,这样您就不需要手动设置viewmodel属性。例如(c#):

然后,使用viewmodel作为视图的模型。将viewmodel类添加到web应用程序项目中

编辑 您的控制器将执行以下操作:

var viewModel = new List<CustomerViewModel>();
var customers = obj.getCustomers();
foreach(var customer in customers)
{
 var customerViewModel = new CustomerViewModel();
 customerViewModel.ID = customer.ID;
 customerViewModel.Name = customer.Name;
 viewModel.Add(customerViewModel);
}

 return View(viewModel);
var viewModel=newlist();
var customers=obj.getCustomers();
foreach(客户中的var客户)
{
var customerViewModel=新的customerViewModel();
customerViewModel.ID=customer.ID;
customerViewModel.Name=customer.Name;
添加(customerViewModel);
}
返回视图(viewModel);
确保将视图设置为期望从控制器传递的CustomServiceWModel类型


希望这有意义。

使用AutoMapper解决。我的控制器

        Dim UserList As New List(Of Customer)= val.getvalues()
        Mapper.CreateMap(Of DevLDB.Customer, MVC_temp.Customer)()


       Dim objModel As Customer= Mapper.Map(Of List(of DevLDB.Customer),  List(of  MVC_temp.Customer))(UserList)



        Return View(objModel )

谢谢你的帮助。但当我尝试这样做时,我得到了一个错误。传递到字典中的模型项的类型为“System.Collections.Generic.List
1[DevLDB.Customer]”,但此字典需要类型为“System.Collections.Generic.IEnumerable
1[MVC_Temp.Customer]”的模型项。请将视图的这一行
@ModelType IEnumerable(属于MVC_Temp.Customer)
”更改为
@ModelType IEnumerable(关于DevLDB.Customer)
。这是假设DevLDB.Customer是您的viewmodel。在这种情况下,它不引用MVC中的模型,而是直接从数据库获取数据。我无法验证。谢谢,我错过了AutoMapper部分。它与AutomapperLove AutoMapper配合使用效果很好。:-)很高兴我能提供帮助
        Dim UserList As New List(Of Customer)= val.getvalues()
        Mapper.CreateMap(Of DevLDB.Customer, MVC_temp.Customer)()


       Dim objModel As Customer= Mapper.Map(Of List(of DevLDB.Customer),  List(of  MVC_temp.Customer))(UserList)



        Return View(objModel )