即時通訊,新的ASP MVC和我不知道如何創建基於存儲過程從我的數據庫模型。我已經有數據庫可以與另一個應用程序一起工作,並且我的網頁必須使用提到的db。ASP .NET MVC 3模型+存儲過程
如果有人能告訴我一些代碼描述正確的方法如何做到這一點, (如果我不是清楚:我需要創建使用存儲過程從我的數據庫,僅此而已ASP .NET模式)提前
TXH
即時通訊,新的ASP MVC和我不知道如何創建基於存儲過程從我的數據庫模型。我已經有數據庫可以與另一個應用程序一起工作,並且我的網頁必須使用提到的db。ASP .NET MVC 3模型+存儲過程
如果有人能告訴我一些代碼描述正確的方法如何做到這一點, (如果我不是清楚:我需要創建使用存儲過程從我的數據庫,僅此而已ASP .NET模式)提前
TXH
@fgeorgiew你只需要知道如何從存儲過程中填充模型(類)?你可以使用像NHibernate或Entity Framework這樣的ORM來爲你處理管道,或者使用原始的ADO.NET代碼,就像下面的例子。請注意,這只是粗略的代碼,但您明白了。
public class MyModel
{
public int ModelId { get; set; }
public string FirstName { get; set; }
}
public class SqlMyModelRespoitory : IMyModelRepository // optional for DI/IoC, assume interface with GetSingleModel method
{
public MyModel GetSingleModel()
{
MyModel model;
string connString = "server=10.1.1.1;database=MyDb;uid=me;pwd=hidden";
using (SqlConnection conn = new SqlConnection(connString))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = conn;
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.CommandText = "p_GetMyModelFromDb";
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
model = new MyModel
{
ModelId = Convert.ToInt32(reader[0]),
FirstName = reader[1].ToString()
};
}
}
}
}
return model;
}
}
你可以先從一些抽象的,表明你的意圖:
public interface IMyRepository
{
SomeModel Get(int id);
}
,那麼你可以寫一個將使用您的存儲過程的實現:
public class MyRepositorySql: IMyRepository
{
public SomeModel Get(int id)
{
... call your stored procedure
}
}
然後設計自己的控制器,它需要這種抽象作爲參數:
public class MyController: Controller
{
private readonly IMyRepository _repository;
public MyController(IMyRepository repository)
{
_repository = repository;
}
public ActionResult Index(int id)
{
var model = _repository.Get(id);
return View(model);
}
}
現在,所有剩下的就是配置您的DI框架,通過正確實施到控制器的構造函數。正如您現在所看到的,控制器與數據獲取的方式完全分離。在你的數據訪問層中使用StoredProcs,一些ORM或其他任何東西並不重要。
存儲過程你離開我身後1秒。 –
thx :)我想我明白了。現在是時候實現這一點,看看結果 – fgeorgiew
好吧,讓我們說你有一個SP名爲Customers這是選擇像一些列:
ID
名稱
地址
現在,您將創建內部模型類的模型文件夾名爲「Customer.cs」並定義屬性如下:
public int ID { get; set; }
public string Name { get; set; }
public string Address { get; set; }
這是你的MODEL類。
thx 4的回覆,但我認爲你沒有正確理解我:)我知道什麼模型是從RoR或Php等,而問題不是關於映射C#模型類到Db表,但問題是關於如何使用我的數據庫和ADO .NET中的存儲過程來完成的。 (關於最後一個我不太確定):) – fgeorgiew
明白了。我誤解了你的問題...... –
如何調用Asp.Net MVC
using System;
using System.Collections.Generic;
using System.IO;
using System.Data;
using System.Data.Entity;
using System.Net;
using System.Data.SqlClient;
public partial class StudentRecord
{
public int Id { get; set; }
public string Name { get; set; }
public string Marks { get; set; }
public string Grade { get; set; }
public Nullable<System.DateTime> DOB { get; set; }
}
public class SqlMyModelRespoitory : First_Test_DBEntities
{
public StudentRecord GetSingleModel()
{
StudentRecord model;
string connString = @"Paste Your Local Connection String";
using (SqlConnection conn = new SqlConnection(connString))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = conn;
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.CommandText = "InsertStudent";
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
model = new StudentRecord
{
Id = Convert.ToInt32(reader[0]),
Name = reader[1].ToString(),
Marks = reader[1].ToString(),
Grade = reader[1].ToString(),
DOB = Convert.ToDateTime(reader[1])
};
}
}
}
}
return model;
}
}
這正是我需要的,謝謝! :) Btw達林Dimitrov answear它很好,但我不熟悉DI(認爲它是依賴注入)。 – fgeorgiew
如果我想要獲取所有對象,該怎麼辦? –