91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

EF支持復雜類型的實現

發布時間:2020-06-04 05:49:22 來源:網絡 閱讀:313 作者:鄒君安 欄目:網絡安全

本節,將介紹如何手動構造復雜類型(ComplexType)以及復雜類型的簡單操作。
通常,復雜類型是指那些由幾個簡單的類型組合而成的類型。比如:一張Customer表,其中有FristName和LastName字段,那么對應的Customer實體類將會有FristName和LastName這兩個屬性。當我們想把FirstName和LastName合成一個名為CustomerName屬性時,此時,如果要在EF中實現這個目的,那么我們就需要用到復雜類型。
目前,由于EF不能顯示支持復雜類型,所以我們無法在VS里的可視化設計器里面來設計我們需要的復雜類型。所以,我們需要手動修改實體模型,以便使其支持復雜類型的屬性。修改的主要步驟有以下幾步:

1> 產生實體模型
2> 修改CSDL文件
3> 修改msl文件
4> 重新生成模型實體類

在后續的介紹,我使用數據庫使用的是NorthWind,并針對Customer表對應的實體類來增加復雜屬性Address,其中復雜屬性Address由Address,City,Region,Country和PostalCode這個幾個組合而成。
下面,介紹具體的操作步驟:

第一步:產生實體模型
實體模型的產生我們可以直接通過在VS可視化設計器來產生(如果不會,請參考《Entity Framework 學習初級篇1--EF基本概況》)。或者使用EdmGen工具來產生(EdmGen工具位于:系統盤符:\WINDOWS\Microsoft.NET\Framework\v3.5下面)。具體步驟就不復述了。
我產生的實體模型文件是:NorthwindEnites.edmx

第二步:修改csdl文件
產生了實體模型后,我們使用記事本或其他文本編輯工具打開實體模型,(小技巧:可以把實體模型后綴.edmx改為.xml,然后把實體模型文件直接拖到VS里面進行修改,這樣修改起來比較方便,待修改完畢后,將后綴改回來即可。)
接著,開始手動修改csdl文件,找到模型文件中關于csdl定義的部分,然后找到實體類型名為Customers的定義節,刪除原來的Address,City,Region,Country,PostalCode屬性定義,然后添加一個名為Address的屬性,如下代碼所示:

EF支持復雜類型的實現

<EntityType Name="Customers">
  <Key>
    <PropertyRef Name="CustomerID" />
  </Key>
  <Property Name="CustomerID" Type="String" Nullable="false" MaxLength="5" Unicode="true" FixedLength="true" />
  <Property Name="CompanyName" Type="String" Nullable="false" MaxLength="40" Unicode="true" FixedLength="false" />
  <Property Name="ContactName" Type="String" MaxLength="30" Unicode="true" FixedLength="false" />
  <Property Name="ContactTitle" Type="String" MaxLength="30" Unicode="true" FixedLength="false" />
  <Property Name="Address" Type="NorthwindModel.CommonAddress" Nullable="false"></Property>
  <Property Name="Phone" Type="String" MaxLength="24" Unicode="true" FixedLength="false" />
  <Property Name="Fax" Type="String" MaxLength="24" Unicode="true" FixedLength="false" />
  <NavigationProperty Name="Orders" Relationship="NorthwindModel.FK_Orders_Customers" FromRole="Customers" ToRole="Orders" />
  <NavigationProperty Name="CustomerDemographics" Relationship="NorthwindModel.CustomerCustomerDemo" FromRole="Customers" ToRole="CustomerDemographics" /></EntityType>

EF支持復雜類型的實現

接著,需要添加一個名為CommonAddress復雜類型的定義,具體如下代碼:

EF支持復雜類型的實現

<ComplexType Name="CommonAddress">
  <Property Name="Address" Type="String" MaxLength="60" Unicode="true" FixedLength="false" />
  <Property Name="City" Type="String" MaxLength="15" Unicode="true" FixedLength="false" />
  <Property Name="Region" Type="String" MaxLength="15" Unicode="true" FixedLength="false" />
  <Property Name="PostalCode" Type="String" MaxLength="10" Unicode="true" FixedLength="false" />
  <Property Name="Country" Type="String" MaxLength="15" Unicode="true" FixedLength="false" /></ComplexType>

EF支持復雜類型的實現

至此,csdl部分修改完畢。

第三步,修改msl文件:
找到msl部分的定義,修改Customers部分的影射定義。具體代碼如下(請注意ComplexProperty節):

EF支持復雜類型的實現

<EntitySetMapping Name="Customers">
    <EntityTypeMapping TypeName="IsTypeOf(NorthwindModel.Customers)">
      <MappingFragment StoreEntitySet="Customers">
    <ScalarProperty Name="CustomerID" ColumnName="CustomerID" />
    <ScalarProperty Name="CompanyName" ColumnName="CompanyName" />
    <ScalarProperty Name="ContactName" ColumnName="ContactName" />
    <ScalarProperty Name="ContactTitle" ColumnName="ContactTitle" />
    <ComplexProperty Name="Address" TypeName="NorthwindModel.CommonAddress">
      <ScalarProperty Name="Address" ColumnName="Address" />
      <ScalarProperty Name="City" ColumnName="City" />
      <ScalarProperty Name="Region" ColumnName="Region" />
      <ScalarProperty Name="PostalCode" ColumnName="PostalCode" />
      <ScalarProperty Name="Country" ColumnName="Country" />
    </ComplexProperty>
    <ScalarProperty Name="Phone" ColumnName="Phone" />
    <ScalarProperty Name="Fax" ColumnName="Fax" />
      </MappingFragment>
    </EntityTypeMapping>
  </EntitySetMapping>

EF支持復雜類型的實現

至此,msl部分修改完畢
第四步:重新產生實體類文件。
我們可以使用EmdGen2工具來重新實體類.cs文件。具體操作如下:
將修改好的模型文件(edmx),拷貝到使用edmgen2.exe同目錄下,然后在命令行中輸入:
Edmgen2 /codegen cs NorthwindEnites.edmx
執行此命令后,會在當前的文件夾下生成一個NorthwindEnites.cs代碼文件,也就是實體類的代碼文件。將改文件改名為:NorthwindEnites.Designer.cs(這步主要是和edmx對應起來)。
然后,將NorthwindEnites.edmx和NorthwindEnites.Designer.cs文件添加到項目中。
至此,復合類型的修改完畢。
按照同樣的修改過程,我們可以給Employees也增加一個Address的復雜類型屬性。
接下來,我們看看具體使用代碼:

> 查詢:

EF支持復雜類型的實現

public void TestAddress()
{    using (var db = new NorthwindModel.NorthwindEntities1())
    {
    Console.WriteLine("Get Five customer addresss :");    var cts = db.Customers.Take(5);    foreach (var c in cts)
    {
        Console.WriteLine("Address:{0},Country:{1},City:{2},PostalCode:{3}", c.Address.Address, c.Address.Country, c.Address.City, c.Address.PostalCode);
    }
    Console.WriteLine("Get Five Employess address:");    var emp = db.Customers.Take(5);    foreach (var c in emp)
    {
        Console.WriteLine("Address:{0},Country:{1},City:{2},PostalCode:{3}", c.Address.Address, c.Address.Country, c.Address.City, c.Address.PostalCode);
    }
    }
}

EF支持復雜類型的實現

>  添加:

EF支持復雜類型的實現

public void AddTest()
{    using (var db = new NorthwindModel.NorthwindEntities1())
    {    var customer = new NorthwindModel.Customers
    {
        CustomerID = "2009",
        CompanyName = "Complex Company",
        ContactName = "xray2005",
        Address = new NorthwindModel.CommonAddress
        {
        Address = "SiChuan,China",
        City = "ChengDou",
        Country = "China",
        PostalCode = "610041",
        Region = "Chenghua"
        }
    };
    db.AddToCustomers(customer);
    db.SaveChanges();    var cst = db.Customers.FirstOrDefault(c => c.CustomerID == "2009");
    Assert.IsNotNull(cst);             
    Console.WriteLine("CustomerID:{0},CompanyName:{1},ContactName:{2},City:{3},Country:{4}", cst.CustomerID, cst.CompanyName, cst.ContactName, cst.Address.City, cst.Address.Country);
    }
}

EF支持復雜類型的實現

>  條件查詢:

EF支持復雜類型的實現

public void QueryTest()
{    using (var db = new NorthwindModel.NorthwindEntities1())
    {    var cst = db.Customers.FirstOrDefault(c => c.Address.City == "ChengDou");
    Assert.IsNotNull(cst);       
    Console.WriteLine("CustomerID:{0},CompanyName:{1},ContactName:{2},City:{3},Country:{4}", cst.CustomerID, cst.CompanyName, cst.ContactName, cst.Address.City, cst.Address.Country);
    }
}

EF支持復雜類型的實現

最后,補充說明:
1, 在VS的可視化設計器里,不支持復雜類型,所以修改后無法再在可視化設計器里修改模型(edmx文件)。
2, 復雜類型不能單獨存在,它必須和某一實體相關起來。
3, 復雜類型不能包含導航屬性,如導航到實體或實體集。
4, 復雜類型具有內部結構但沒有 Key(主鍵) 屬性的數據類型


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜宾市| 锡林郭勒盟| 裕民县| 驻马店市| 桑植县| 商城县| 射阳县| 杭锦后旗| 沙雅县| 长葛市| 镇江市| 雷波县| 原平市| 东明县| 潼关县| 闻喜县| 灌南县| 潜江市| 怀集县| 江达县| 武山县| 西贡区| 静宁县| 准格尔旗| 莲花县| 蒙城县| 西平县| 晋江市| 四平市| 日土县| 福安市| 延庆县| 格尔木市| 夏邑县| 北安市| 景谷| 崇仁县| 汉源县| 海林市| 资中县| 石家庄市|