iT邦幫忙

0

請問如果使用 ADO.NET 在NET MVC中如何自動建立 Models?

kyoe 2019-08-06 11:54:021933 瀏覽

狀況是這樣,我有一個舊的網站是用 asp+mssql 做的,最近想學 net mvc,所以想用舊的網站來實做練習。

買的書上教學的大多是用 entity, 但是只能用 linq, 我還是想用 tsql 來做資料庫的存取,不用在重頭學起, 所以好像只能使用 ado.net 來連線。

但實做後發現, entity 在 vs2019 可以讀取既有資料庫的欄位來自動的建立對應的 models 很方便,想請問 ado.net 有類似的方法嗎?

會這樣問是因為目前的主資料表裡欄位可能都有好幾十個,看看有沒有比較方便的方式或工具可以讀取資料表的欄位來自動建立 ado.net 可以使用的 models

還是 ado.net 也可以使用 entity 建立起來的 models?

我從 asp 轉來 mvc, 本來對資料庫存取就是兩三行的事, 現在在 mvc 中似乎要先開資料庫把資料讀出在 models 內,然後在 controller 中對資料動作後轉送給 view(這個流程對嗎?)

看了兩本書, 大多還是著墨在 LINQ+Entity Framework 較多,一本沒提 ado.net, 一本稍微帶過, 所以想照抄來練習都很困難

如果想做個簡單的查詢(沒分頁)

models的cs是建立模型+開資料庫
controller是轉送models給view
view用@foreach(var item in model)來讀出嗎

先謝謝各位耐心看完, 謝謝

player iT邦大師 1 級 ‧ 2019-08-06 18:45:07 檢舉
ADO.NET 與LINQ 記得有方法可以互轉資料
https://docs.microsoft.com/zh-tw/dotnet/framework/data/adonet/creating-a-datatable-from-a-query-linq-to-dataset
https://stackoverflow.com/questions/10855/linq-query-on-a-datatable

Entity Framework 則是有3種模式可以用
Code First模式, Model First模式, Database First模式

ADO.NET因為是使用SQL語法, 所以如果一開始沒用參數化查詢的寫法的話
可能造成SQL資料隱碼的漏洞
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
小魚
iT邦大師 1 級 ‧ 2019-08-06 13:38:51
最佳解答

ADO.NET 這邊 有一些範例

還是 ado.net 也可以使用 entity 建立起來的 models?

這當然可以,
只不過你就不能用Entity直接更新資料的方式.

在 mvc 中似乎要先開資料庫把資料讀出在 models 內

沒人說你一定要存在Models內,
你也可以用SqlDataAdapter存進DataTable裡面.

大多還是著墨在 LINQ+Entity Framework 較多

因為這樣比較好寫書...
不過我沒有在用Entity,
除非是接別人舊的專案...

models的cs是建立模型+開資料庫

這一行看不懂...

controller是轉送models給view
view用@foreach(var item in model)來讀出嗎

看起來是沒錯,
不過看你怎麼寫...

看更多先前的回應...收起先前的回應...
kyoe iT邦新手 5 級 ‧ 2019-08-06 14:29:01 檢舉

models的cs是建立模型+開資料庫
就是
建一個 class
下面開 db 把資料塞進 array?
c = new class();
c.name = reader[0];
類似這樣?

小魚 iT邦大師 1 級 ‧ 2019-08-06 14:35:57 檢舉

這樣也可以,
你可以先寫看看,
有問題先問Google,
真的問不到再上來問...

kyoe iT邦新手 5 級 ‧ 2019-08-06 14:41:22 檢舉

我現在遇到的問題就是在建 class的時候發現欄位太多了..要一個一個寫
public string column1 { get; set; }
public string column2 { get; set; }
public string column3 { get; set; }
.....
這樣寫下去有點太笨了..所以才想說有沒有甚麼可以自動讀出 db裡的欄位自動建立 class哈哈

小魚 iT邦大師 1 級 ‧ 2019-08-06 15:17:28 檢舉

你不是說了嗎?
用Entity建吧,
不過你要先在資料庫建好結構.

player iT邦大師 1 級 ‧ 2019-08-06 20:25:47 檢舉

如果你用SQL Server的話, 我以前寫過一個預存程序, 從資料表建立C#的model class
你參考看看(以前寫ASP.NET MVC時懶得自己寫model class, 就弄這個了, 2015年時的)

http://www.player.idv.tw/prog/index.php/MyTableToCSharp.sql

player iT邦大師 1 級 ‧ 2019-08-06 20:35:10 檢舉

最初的原形是2007年的這個, 當時懶得寫SQL語法, 就參考當時同事的作法弄了這個
http://www.player.idv.tw/prog/index.php/MyTable2SQL.sql

小魚 iT邦大師 1 級 ‧ 2019-08-07 07:52:34 檢舉

我有個疑問,
如果我沒搞錯的話,
你這是把文字印出來,
不是真的建一個檔案出來吧?

所以要把文字內容複製到檔案中嗎?
P.S.
好像少了命名空間,
所以應該只要把class之後那段複製進去就好.

kyoe iT邦新手 5 級 ‧ 2019-08-07 10:26:16 檢舉

謝謝,後來發現可以使用 entity 建的 model, 我本來以為 entity 建的就只能給 entity 使用,後來發現好像都可以用到

小魚 iT邦大師 1 級 ‧ 2019-08-07 11:07:16 檢舉

當然可以,
不過我現在的資料表都是無中生有,
我覺得Entity對我來說不實用...

我要發表回答

立即登入回答