校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > ASP.NET Web API教程 創建域模型的方法詳細介紹

ASP.NET Web API教程 創建域模型的方法詳細介紹

熱門標簽:電話機器人廣告話術 太原外呼電銷機器人費用 保山電話外呼管理系統怎么用 蘇州銷售外呼系統預算 淘寶地圖標注如何做 使用智能電話機器人違法嗎 外呼系統用員工身份證 東莞語音電銷機器人排名 朝陽市地圖標注
添加模型
There are three ways to approach Entity Framework:
有三種方式使用實體框架:
Database-first: You start with a database, and Entity Framework generates the code.
Database-first(數據庫先行):從一個數據庫開始,然后實體框架生成相應代碼。
Model-first: You start with a visual model, and Entity Framework generates both the database and code.
Model-first(模型先行):先從一個可視化模型開始,然后實體框架生成數據庫和代碼。
Code-first: You start with code, and Entity Framework generates the database.
Code-first(代碼先行):先從代碼開始,然后實體框架生成數據庫。
We are using the code-first approach, so we start by defining our domain objects as POCOs (plain-old CLR objects). With the code-first approach, domain objects don't need any extra code to support the database layer, such as transactions or persistence. (Specifically, they do not need to inherit from the EntityObject class.) You can still use data annotations to control how Entity Framework creates the database schema.

我們打算使用code-first方法,因此,首先把域對象定義成POCO(plain-old CLR objects — 舊式無格式公共語言運行時(CLR)對象。很多人不太理解POCO對象,其實這種對象就像文本文件一樣,是一種最簡單、最原始、不帶任何格式的對象。因此,在各種環境中最容易對這類對象進行處理,包括用各類語言進行處理 — 譯者注)。利用code-first方法,域對象不需要任何附加代碼去支持數據庫層,如事務處理、持久化等。(特別是它們不需要繼承于EntityObject類。)你仍可以使用數據注解(data annotation)對實體框架如何創建數據庫方案進行控制。
Because POCOs do not carry any extra properties that describe database state, they can easily be serialized to JSON or XML. However, that does not mean you should always expose your Entity Framework models directly to clients, as we'll see later in the tutorial.
由于POCO不帶描述數據庫狀態的任何附加屬性,它們可以很容易地被序列化成JSON或XML。然而,這并不意味著你應當總是把實體框架模型直接暴露給客戶端,就像我們稍后在本教程所看到的那樣。

We will create the following POCOs:
我們將創建以下POCO:
Product
Order
OrderDetail
To create each class, right-click the Models folder in Solution Explorer. From the context menu, select Add and then select Class.
要創建每個類,在“解決方案資源管理器”中右擊Models文件夾。從上下文菜單選擇“添加”,然后選擇“類”(如圖2-14所示)。
 
圖2-14. 創建POCO類
Add a Product class with the following implementation:
用以下實現添加一個Product類(產品類):
復制代碼 代碼如下:

namespace ProductStore.Models
{
using System.ComponentModel.DataAnnotations;
public class Product
{
[ScaffoldColumn(false)]
public int Id { get; set; }
[Required]
public string Name { get; set; }
public decimal Price { get; set; }
public decimal ActualCost { get; set; }
}
}

By convention, Entity Framework uses the Id property as the primary key and maps it to an identity column in the database table. When you create a new Product instance, you won't set a value for Id, because the database generates the value.
根據約定,實體框架用Id屬性作為主鍵,并把它映射成數據庫表中的標識列。當創建一個新的Product實例時,不必為Id設置值,因為數據庫會生成它。
The ScaffoldColumn attribute tells ASP.NET MVC to skip the Id property when generating an editor form. The Required attribute is used to validate the model. It specifies that the Name property must be a non-empty string.
ScaffoldColumn(支架列)注解屬性是告訴ASP.NET MVC,在生成編輯表單時,跳過這個Id屬性。Required注解屬性用于對模型進行驗證。它指定Name屬性必須是一個非空字符串。
注:本文把ScaffoldConlumn、Required等這一類英文中叫做Annotation Attribute的屬性(Attribute)譯為注解屬性(Annotation Attribute),以便與類中的那些屬性加以區別 — 譯者注
Add the Order class:
添加Order類(訂單類):
復制代碼 代碼如下:

namespace ProductStore.Models
{
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
public class Order
{
public int Id { get; set; }
[Required]
public string Customer { get; set; }
// Navigation property
// 導航屬性
public ICollectionOrderDetail> OrderDetails { get; set; }
}
}

Add the OrderDetail class:
添加OrderDetail類(訂單細節類,或訂單詳情類):
復制代碼 代碼如下:

namespace ProductStore.Models
{
public class OrderDetail
{
public int Id { get; set; }
public int Quantity { get; set; }
public int OrderId { get; set; }
public int ProductId { get; set; }
// Navigation properties
public Product Product { get; set; }
public Order Order { get; set; }
}
}

Foreign Key Relations
外鍵關系
An order contains many order details, and each order detail refers to a single product. To represent these relations, the OrderDetail class defines properties named OrderId and ProductId. Entity Framework will infer that these properties represent foreign keys, and will add foreign-key constraints to the database.
一份訂單包含很多訂單細節,而每個訂單細節指向一個單一的產品。為了表示這些關系,OrderDetail類定義了名稱為OrderId和ProductId的屬性。實體框架將會推斷出這些屬性表示的是外鍵,并會把外鍵約束添加到數據庫(見圖2-15)。
 
圖2-15. 外鍵關系
The Order and OrderDetail classes also include “navigation” properties, which contain references to the related objects. Given an order, you can navigate to the products in the order by following the navigation properties.
Order和OrderDetail類也包含了“導航(navigation)”屬性,導航屬性包含了對相關對象的引用。對于一份給定的訂單,可以根據導航屬性導航到這份訂單的產品。
Compile the project now. Entity Framework uses reflection to discover the properties of the models, so it requires a compiled assembly to create the database schema.
現在,編譯這個項目。實體框架會使用反射來發現這些模型的屬性,因此它需要編譯后的程序集來創建相應的數據庫方案(這里的數據庫方案意指數據庫、表結構以及關系等數據庫方面的定義 — 譯者注)。
Configure the Media-Type Formatters
配置Media-Type格式化器
A media-type formatter is an object that serializes your data when Web API writes the HTTP response body. The built-in formatters support JSON and XML output. By default, both of these formatters serialize all objects by value.
media-type(媒體類型)格式化器是Web API書寫HTTP響應體時對數據進行序列化的一個對象。內建的格式化器支持JSON和XML輸出。默認地,這兩種格式化都會按值序列化所有對象。
Serialization by value creates a problem if an object graph contains circular references. That's exactly the case with the Order and OrderDetail classes, because each holds a reference to the other. The formatter will follow the references, writing each object by value, and go in circles. Therefore, we need to change the default behavior.
如果對象圖含有循環引用,按值序列化會出現問題。這恰好是Order類和OrderDetail類的情況,因為每一個都含有對另一個的引用。格式化器會遵循這些引用,按值寫出每一個對象,于是會引起循環。因此,我們需要修改這種默認行為。
In Solution Explorer, expand the App_Start folder and open the file named WebApiConfig.cs. Add the following code to the WebApiConfig class:
在“解決方案資源管理器”中,展開App_Start文件夾,并打開名為WebApiConfig.cs的文件。將以下代碼添加到這個WebApiConfig.cs類中(以下代碼中的“新代碼” — 譯者注):
復制代碼 代碼如下:

public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
// New code:
// 新代碼:
var json = config.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling =
Newtonsoft.Json.PreserveReferencesHandling.Objects;
config.Formatters.Remove(config.Formatters.XmlFormatter);
}
}

This code sets the JSON formatter to preserve object references, and removes the XML formatter from the pipeline entirely. (You can configure the XML formatter to preserve object references, but it's a little more work, and we only need JSON for this application. For more information, see Handling Circular Object References.)
這段代碼把JSON格式化器設置為防止對象引用(“新代碼”第二行的作用 — 譯者注),并把XML格式化器從管線(指HTTP的請求處理管線 — 譯者注)中完全刪除(“新代碼”最后一行的作用 — 譯者注)。(你也可以把XML格式化器配置成防止對象引用,但這還要做一點工作,而對于這個應用程序,我們只需要JSON。更多信息參閱“處理循環對象引用”
您可能感興趣的文章:
  • 創建一個完整的ASP.NET Web API項目
  • ASP.NET中Web API的簡單實例
  • ASP.NET MVC Web API HttpClient簡介
  • ASP.NET Web Api 2實現多文件打包并下載文件的實例
  • 支持Ajax跨域訪問ASP.NET Web Api 2(Cors)的示例教程
  • ASP.NET Web API教程 創建Admin視圖詳細介紹
  • ASP.NET Web API如何將注釋自動生成幫助文檔
  • ASP.NET Web API教程 創建Admin控制器實例分享
  • .Net Web Api中利用FluentValidate進行參數驗證的方法

標簽:潛江 阿里 運城 綏化 克拉瑪依 西藏 洛陽 呼倫貝爾

巨人網絡通訊聲明:本文標題《ASP.NET Web API教程 創建域模型的方法詳細介紹》,本文關鍵詞  ASP.NET,Web,API,教程,創建,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《ASP.NET Web API教程 創建域模型的方法詳細介紹》相關的同類信息!
  • 本頁收集關于ASP.NET Web API教程 創建域模型的方法詳細介紹的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    91精品国产综合久久精品图片| 国产成人自拍网| 中文字幕精品三区| 国产精品成人在线观看| 成人欧美一区二区三区视频网页 | 国产精品天美传媒沈樵| 91香蕉视频mp4| 8v天堂国产在线一区二区| 欧美xxx久久| 中文字幕亚洲精品在线观看 | 在线电影院国产精品| 69堂成人精品免费视频| 宅男在线国产精品| 岛国精品在线播放| 日韩毛片一二三区| 亚洲精品成人精品456| 国产人妖乱国产精品人妖| 亚洲自拍欧美精品| 国产aⅴ精品一区二区三区色成熟| 成人91在线观看| 91精品国产免费| 国产精品电影一区二区| 另类小说欧美激情| 欧美三区免费完整视频在线观看| 久久一日本道色综合| 午夜精品一区二区三区免费视频| 精品亚洲国产成人av制服丝袜| 91免费在线视频观看| 欧美日韩高清在线| 日韩一区在线播放| 激情综合亚洲精品| 欧美久久久久久久久中文字幕| 久久日韩精品一区二区五区| 2023国产精华国产精品| 奇米影视在线99精品| 色综合天天在线| 国产精品午夜在线| 国产成人鲁色资源国产91色综| 国产欧美日韩精品一区| 色噜噜狠狠色综合中国| 国产精品日产欧美久久久久| 国产一区二区视频在线| 成人性生交大片免费看视频在线 | 精一区二区三区| 欧美一级xxx| 国产在线精品视频| 精品国产免费一区二区三区香蕉| 一区在线中文字幕| 99久久精品免费看国产 | 国产不卡视频一区二区三区| 日韩视频免费直播| 蜜桃av一区二区| 久久美女艺术照精彩视频福利播放 | 国产一区二区精品久久99| 精品国产电影一区二区| 国产69精品久久久久777| 国产网站一区二区三区| 国产成人综合自拍| 日韩理论片中文av| 免费观看久久久4p| 久久久777精品电影网影网| 国产成人精品免费网站| 亚洲福利视频导航| 久久精品一区二区三区av| 91在线免费看| 狠狠色狠狠色合久久伊人| 亚洲人成亚洲人成在线观看图片| 正在播放一区二区| 色成人在线视频| 处破女av一区二区| 国产制服丝袜一区| 亚洲gay无套男同| 久久久亚洲综合| 91国偷自产一区二区三区观看| 狠狠狠色丁香婷婷综合激情| 91在线码无精品| 捆绑变态av一区二区三区| 国产精品二三区| 国产欧美日韩视频一区二区| 欧美精三区欧美精三区| 91福利国产精品| 99在线热播精品免费| 不卡一区二区三区四区| 国产精品一区二区在线观看网站| 国产三级一区二区| 国产日韩精品久久久| 国产日韩精品一区二区浪潮av| 日本视频一区二区三区| 欧美成人激情免费网| 欧美亚洲国产一区二区三区va| 91亚洲国产成人精品一区二区三| 成人一区在线观看| 精品久久久三级丝袜| 精品国产成人在线影院 | 国产剧情一区二区三区| 日韩亚洲欧美一区| 亚洲精品在线网站| 欧美激情在线观看视频免费| 亚洲欧美福利一区二区| 久久免费国产精品| 久久色中文字幕| 中文字幕亚洲欧美在线不卡| 亚洲三级理论片| 男女性色大片免费观看一区二区| 日本sm残虐另类| 91亚洲大成网污www| 91色porny| 91精品国产91久久综合桃花 | 国产一区二区三区久久久 | 日韩在线a电影| 麻豆国产91在线播放| 国产经典欧美精品| 欧美日韩一级二级| 国产欧美日韩三级| 亚洲gay无套男同| 亚洲人妖av一区二区| 老汉av免费一区二区三区 | 欧美性色综合网| 国产欧美日韩在线| 日韩二区在线观看| 日本乱码高清不卡字幕| 日韩精品一区二区三区中文精品| 国产+成+人+亚洲欧洲自线| 欧美一区二区三区四区视频| 一个色在线综合| 成人一级黄色片| 国产日产精品1区| 国产精品一区二区男女羞羞无遮挡| 97精品国产露脸对白| 亚洲国产精品成人久久综合一区 | 青青草成人在线观看| 一本一道波多野结衣一区二区| www精品美女久久久tv| 国产成人亚洲综合a∨猫咪| 国产欧美日韩综合| 国产91精品久久久久久久网曝门| 亚洲欧洲无码一区二区三区| 亚洲精品成人悠悠色影视| 在线观看91精品国产麻豆| 国产福利不卡视频| 亚洲午夜一区二区| 精品成人a区在线观看| 色婷婷av一区二区| 国产一本一道久久香蕉| 一区二区成人在线观看| 亚洲国产成人午夜在线一区| 欧美久久久影院| 亚洲国产精品成人综合 | 天天影视网天天综合色在线播放| 精品精品欲导航| 5566中文字幕一区二区电影| 国产乱子伦视频一区二区三区 | 国产亚洲精品7777| 欧美福利视频一区| 在线精品视频免费播放| 国产精品一线二线三线精华| 免费在线看一区| 亚洲精品国产精华液| 日本一区二区视频在线| 欧美变态tickling挠脚心| 91精品国产高清一区二区三区 | 午夜精品久久久久久久久久| 一区二区三区不卡视频| 国产精品视频一二| 中文字幕欧美三区| 亚洲美女淫视频| 亚洲精品乱码久久久久久久久 | 91麻豆精品国产91久久久资源速度| 成人av网址在线| 99久久亚洲一区二区三区青草 | 国产精品网曝门| 欧美国产日产图区| 亚洲视频在线观看一区| 亚洲视频在线观看一区| 亚洲精品成人悠悠色影视| 欧美日韩电影一区| 在线播放91灌醉迷j高跟美女 | 欧美一区二区三区免费| 久久免费国产精品| 中文字幕日本不卡| 亚洲成人免费影院| 国产一区二区久久| 欧美视频日韩视频| 久久久久久97三级| 亚洲成av人综合在线观看| 国产老肥熟一区二区三区| 亚洲裸体在线观看| 日韩国产欧美一区二区三区| 国产一区二区三区四区在线观看 | 亚洲欧美综合另类在线卡通| 水蜜桃久久夜色精品一区的特点| 国产裸体歌舞团一区二区| 欧美日韩精品欧美日韩精品| 国产日本欧洲亚洲| 国产综合久久久久影院| 中文字幕在线不卡国产视频| 美女在线视频一区| 欧美日韩一区二区三区不卡| 国产精品久久久久久久久快鸭| 麻豆精品一区二区综合av|