国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - ASP.NET教程 - ASP.NET Web API教程 創(chuàng)建域模型的方法詳細(xì)介紹

ASP.NET Web API教程 創(chuàng)建域模型的方法詳細(xì)介紹

2019-10-10 11:06asp.net教程網(wǎng) ASP.NET教程

本文將介紹幾種常見(jiàn)的創(chuàng)建域模型的方法,有需要的朋友可以適當(dāng)?shù)膮⒖?

添加模型 
There are three ways to approach Entity Framework: 
有三種方式使用實(shí)體框架: 
Database-first: You start with a database, and Entity Framework generates the code. 
Database-first(數(shù)據(jù)庫(kù)先行):從一個(gè)數(shù)據(jù)庫(kù)開(kāi)始,然后實(shí)體框架生成相應(yīng)代碼。 
Model-first: You start with a visual model, and Entity Framework generates both the database and code. 
Model-first(模型先行):先從一個(gè)可視化模型開(kāi)始,然后實(shí)體框架生成數(shù)據(jù)庫(kù)和代碼。 
Code-first: You start with code, and Entity Framework generates the database. 
Code-first(代碼先行):先從代碼開(kāi)始,然后實(shí)體框架生成數(shù)據(jù)庫(kù)。 
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方法,因此,首先把域?qū)ο蠖x成POCO(plain-old CLR objects — 舊式無(wú)格式公共語(yǔ)言運(yùn)行時(shí)(CLR)對(duì)象。很多人不太理解POCO對(duì)象,其實(shí)這種對(duì)象就像文本文件一樣,是一種最簡(jiǎn)單、最原始、不帶任何格式的對(duì)象。因此,在各種環(huán)境中最容易對(duì)這類(lèi)對(duì)象進(jìn)行處理,包括用各類(lèi)語(yǔ)言進(jìn)行處理 — 譯者注)。利用code-first方法,域?qū)ο蟛恍枰魏胃郊哟a去支持?jǐn)?shù)據(jù)庫(kù)層,如事務(wù)處理、持久化等。(特別是它們不需要繼承于EntityObject類(lèi)。)你仍可以使用數(shù)據(jù)注解(data annotation)對(duì)實(shí)體框架如何創(chuàng)建數(shù)據(jù)庫(kù)方案進(jìn)行控制。 
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不帶描述數(shù)據(jù)庫(kù)狀態(tài)的任何附加屬性,它們可以很容易地被序列化成JSON或XML。然而,這并不意味著你應(yīng)當(dāng)總是把實(shí)體框架模型直接暴露給客戶(hù)端,就像我們稍后在本教程所看到的那樣。 

We will create the following POCOs: 
我們將創(chuàng)建以下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. 
要?jiǎng)?chuàng)建每個(gè)類(lèi),在“解決方案資源管理器”中右擊Models文件夾。從上下文菜單選擇“添加”,然后選擇“類(lèi)”(如圖2-14所示)。 
ASP.NET Web API教程 創(chuàng)建域模型的方法詳細(xì)介紹 
圖2-14. 創(chuàng)建POCO類(lèi) 
Add a Product class with the following implementation: 
用以下實(shí)現(xiàn)添加一個(gè)Product類(lèi)(產(chǎn)品類(lèi)): 

復(fù)制代碼代碼如下:


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. 
根據(jù)約定,實(shí)體框架用Id屬性作為主鍵,并把它映射成數(shù)據(jù)庫(kù)表中的標(biāo)識(shí)列。當(dāng)創(chuàng)建一個(gè)新的Product實(shí)例時(shí),不必為Id設(shè)置值,因?yàn)閿?shù)據(jù)庫(kù)會(huì)生成它。 
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,在生成編輯表單時(shí),跳過(guò)這個(gè)Id屬性。Required注解屬性用于對(duì)模型進(jìn)行驗(yàn)證。它指定Name屬性必須是一個(gè)非空字符串。 
注:本文把ScaffoldConlumn、Required等這一類(lèi)英文中叫做Annotation Attribute的屬性(Attribute)譯為注解屬性(Annotation Attribute),以便與類(lèi)中的那些屬性加以區(qū)別 — 譯者注 
Add the Order class: 
添加Order類(lèi)(訂單類(lèi)): 

復(fù)制代碼代碼如下:


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 
// 導(dǎo)航屬性 
public ICollection<OrderDetail> OrderDetails { get; set; } 


Add the OrderDetail class: 
添加OrderDetail類(lèi)(訂單細(xì)節(jié)類(lèi),或訂單詳情類(lèi)): 

復(fù)制代碼代碼如下:


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 
外鍵關(guān)系 
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. 
一份訂單包含很多訂單細(xì)節(jié),而每個(gè)訂單細(xì)節(jié)指向一個(gè)單一的產(chǎn)品。為了表示這些關(guān)系,OrderDetail類(lèi)定義了名稱(chēng)為OrderId和ProductId的屬性。實(shí)體框架將會(huì)推斷出這些屬性表示的是外鍵,并會(huì)把外鍵約束添加到數(shù)據(jù)庫(kù)(見(jiàn)圖2-15)。 
ASP.NET Web API教程 創(chuàng)建域模型的方法詳細(xì)介紹 
圖2-15. 外鍵關(guān)系 
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類(lèi)也包含了“導(dǎo)航(navigation)”屬性,導(dǎo)航屬性包含了對(duì)相關(guān)對(duì)象的引用。對(duì)于一份給定的訂單,可以根據(jù)導(dǎo)航屬性導(dǎo)航到這份訂單的產(chǎn)品。 
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. 
現(xiàn)在,編譯這個(gè)項(xiàng)目。實(shí)體框架會(huì)使用反射來(lái)發(fā)現(xiàn)這些模型的屬性,因此它需要編譯后的程序集來(lái)創(chuàng)建相應(yīng)的數(shù)據(jù)庫(kù)方案(這里的數(shù)據(jù)庫(kù)方案意指數(shù)據(jù)庫(kù)、表結(jié)構(gòu)以及關(guān)系等數(shù)據(jù)庫(kù)方面的定義 — 譯者注)。 
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(媒體類(lèi)型)格式化器是Web API書(shū)寫(xiě)HTTP響應(yīng)體時(shí)對(duì)數(shù)據(jù)進(jìn)行序列化的一個(gè)對(duì)象。內(nèi)建的格式化器支持JSON和XML輸出。默認(rèn)地,這兩種格式化都會(huì)按值序列化所有對(duì)象。 
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. 
如果對(duì)象圖含有循環(huán)引用,按值序列化會(huì)出現(xiàn)問(wèn)題。這恰好是Order類(lèi)和OrderDetail類(lèi)的情況,因?yàn)槊恳粋€(gè)都含有對(duì)另一個(gè)的引用。格式化器會(huì)遵循這些引用,按值寫(xiě)出每一個(gè)對(duì)象,于是會(huì)引起循環(huán)。因此,我們需要修改這種默認(rèn)行為。 
In Solution Explorer, expand the App_Start folder and open the file named WebApiConfig.cs. Add the following code to the WebApiConfig class: 
在“解決方案資源管理器”中,展開(kāi)App_Start文件夾,并打開(kāi)名為WebApiConfig.cs的文件。將以下代碼添加到這個(gè)WebApiConfig.cs類(lèi)中(以下代碼中的“新代碼” — 譯者注): 

復(fù)制代碼代碼如下:


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格式化器設(shè)置為防止對(duì)象引用(“新代碼”第二行的作用 — 譯者注),并把XML格式化器從管線(指HTTP的請(qǐng)求處理管線 — 譯者注)中完全刪除(“新代碼”最后一行的作用 — 譯者注)。(你也可以把XML格式化器配置成防止對(duì)象引用,但這還要做一點(diǎn)工作,而對(duì)于這個(gè)應(yīng)用程序,我們只需要JSON。更多信息參閱“處理循環(huán)對(duì)象引用”

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 在线观看亚洲 | av色综合 | 久久天天躁狠狠躁夜夜免费观看 | 国产精品 日韩 | 日韩一区二区精品 | 精品国产91亚洲一区二区三区www | 狠狠操综合网 | 午夜激情在线播放 | 国产一区二区三区免费视频 | 久久免费99精品久久久久久 | 欧美成人免费在线 | 色毛片| 日韩精品 | 日本天堂在线 | 九九久久精品 | 国产三级在线 | 日韩精品一区在线 | 国产一区二区免费视频 | 成人精品国产免费网站 | 在线a毛片 | 欧美一级黄色片网站 | 国产伦精品一区二区三区 | 激情综合在线观看 | 日韩视频在线观看 | 亚洲一区二区三区四区的 | 男女免费观看在线爽爽爽视频 | 日本黄色录像 | 在线观看成人高清 | 精品一区二区6 | 国产韩国精品一区二区三区 | 色香蕉久久 | 日韩欧美1区 | 黄色在线免费 | 日韩精品一区二区三区中文在线 | 免费黄色在线观看 | 中文字幕的 | 中文字幕一区在线观看视频 | 国产91看片 | 免费一区二区 | 黄色免费看| 午夜精品一区二区三区在线观看 |