我想使用ASP.NET MVC沒有EF和可能不LINQ。首先,我在VS2010中創建了基本的ASP.net mvc模板上的一個表/模型/控制器/視圖(僅實現了索引頁和索引方法)。我目前正在嘗試/錯誤,因爲網絡上的所有教程都基於EF,並且我擁有嵌入式c背景。ASP.NET MVC 4項目沒有任何ORM
我的問題是:
體系結構是否正確?
只見庫模式在一些開源項目使用,如nearforums。它的優點是什麼?它如何適應這個問題,是否取代DAL?
我應該通過數據表,以查看或對象表示的數據表?
我可以傳遞比一個模型剃刀頁嗎?我如何列出2個不同的表格?
是更好地把所有DAL代碼在一個文件?
DAL:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Configuration;
using MySql.Data.MySqlClient;
namespace MvcApplication1.Models
{
public class DAL
{
public DAL()
{ }
public DataTable getDataTable(string tableName)
{
using (MySqlConnection conn = new MySqlConnection(ConfigurationManager.ConnectionStrings["MySQLConn"].ConnectionString))
{
using (MySqlCommand command = conn.CreateCommand())
{
command.CommandText = "select * from " + tableName;
command.CommandType = CommandType.Text;
conn.Open();
var table = new DataTable();
table.Load(command.ExecuteReader());
return table;
}
}
}
}
}
,它表示代碼產品表Product.cs類:
namespace MvcApplication1.Models
{
public class Product
{
public int ProductId { get; set; }
public string Name { get; set; }
public string Producer { get; set; }
public int UnitPrice { get; set; }
}
}
ProductController.cs
namespace MvcApplication1.Controllers
{
public class ProductController : Controller
{
//
// GET: /Product/
DAL dal = new DAL();
public ActionResult Index()
{
DataTable dt = dal.getDataTable("Product");
Product[] products = new Product[dt.Rows.Count];
for (int i = 0; i < dt.Rows.Count; i++)
{
products[i] = new Product();
products[i].ProductId = (int)dt.Rows[i]["ProductId"];
products[i].Name = (string)dt.Rows[i]["Name"];
products[i].Producer = (string)dt.Rows[i]["Producer"];
products[i].UnitPrice = Decimal.ToInt32((decimal)dt.Rows[i]["UnitPrice"]);
}
return View(products);
}
........
........
}
Index.cshtml:
@model IEnumerable<MvcApplication1.Models.Product>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.ProductId)
</td>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Producer)
</td>
<td>
@Html.DisplayFor(modelItem => item.UnitPrice)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.ProductId }) |
@Html.ActionLink("Details", "Details", new { id=item.ProductId }) |
@Html.ActionLink("Delete", "Delete", new { id=item.ProductId })
</td>
<br>
</tr>
}
不幸的是,你說你不使用OR/M,但是你使用的是DataTable,它是OR/M早期的.NET早期教學方法。我期待您使用DataReader。在這一點上,我相信你應該考慮不使用EF或者NHib或者其他的,但是使用沉重和過時的DataSet模型的優點。 –
我可以問一下不使用EF的原因是什麼?您是否意識到將數據錶轉換爲模型類型所需的所有樣板代碼都容易出現很多錯誤(投射,魔術字符串等)?此外,性能不會更高,我不明白爲什麼世界上有人不喜歡使用LinQ。這是人類能夠想到的最好的事情。 –
我不使用EF/linq的主要原因是性能。我知道我需要編寫樣板代碼,我更喜歡這種性能開銷。 [鏈接](http://blogs.msdn.com/b/adonet/archive/2012/02/14/sneak-preview-entity-framework-5-0-performance-improvements.aspx) – bilgehan