在ABPZERO中,擴充套件實體的方法。

2021-09-20 01:39:43 字數 3221 閱讀 1409

本教程是一步一步指南以了解如何新增新的屬性,對現有的實體,從資料庫層和 ui 層。

在 aspnet zero中的tenant、user和role的實體都算 抽象的,另一些則不。有一些差異。所以,我們分離它分成兩個部分。

我們用user實體作為例子。我們想要將address 屬性新增到實體中。

開啟 authorization\users\user.cs (在.core類庫中) 並新增新的屬性 ︰

public class user : abpuser

}

在這裡,我們隱藏了其他**僅僅為了顯示簡單的使用者類。

然後您可以新增位址屬性的屬性。

由於我們新增新的屬性,我們資料庫架構已更改。不論我們改變我們的實體,我們應新增新的資料庫遷移。開啟控制台軟體包管理器並編寫新的遷移** ︰

add-migration "added_address_to_user"
得到乙個遷移類:

public partial class added_address_to_user : dbmigration

public override void down()

}

然後更新資料庫:

update-database

然後開啟資料庫中的「abpusers」表,可以看到乙個新的「address」字段:

便於測試,我們新增了一些使用者資料。

[automapfrom(typeof(user))]

public class userlistdto : entitydto, ipassivable, ihascreationtime

}

然後執行專案,然後開啟使用者列表:

上面的例子是通過spa來演示的。如果要使用mpa,操作也是類似的,只要開啟web專案中的web\areas\mpa\views\users\index.js,新增欄位就可以。

public class usereditdto : ivalidate, ipassivable

}

@l("address")

然後執行專案:

此處我們沒有使用本地化文字,如果要啟用的話,core類庫中\localization\extendentitiesdemo中的xml檔案開啟。

我們拿edition實體作為示例

由於 edition不是抽象物件,我們無法給他新增新屬性。但是我們可以使用oop模式中的

繼承和組合(inheritance or composition)。

我們使用簡單的繼承,建立乙個新類myedition繼承edition。

public class myedition : edition

}

新增遷移

由於我們新增乙個新的實體類,我們資料庫架構已更改。不論我們改變我們的實體,我們應新增新的資料庫遷移。開啟控制台軟體包管理器並編寫新的遷移** ︰

add-migration "added_myedition_entity"

這將建立乙個新的實體框架遷移類,如下所示 ︰

public partial class added_myedition_entity : dbmigration

, annotations: new dictionary,

});addcolumn("dbo.abpeditions", "price", c => c.int(nullable: false, defaultvalue: 0));

addcolumn("dbo.abpeditions", "discriminator", c => c.string(nullable: false, maxlength: 128, defaultvalue: "myedition"));

}public override void down()

}

實際上,abpeditions 遷移中,新增兩個新字段:

在更新資料庫之前,我們需要改下預設的遷移**:

addcolumn("dbo.abpeditions", "price", c => c.int());

addcolumn("dbo.abpeditions", "discriminator", c => c.string(nullable: false, maxlength: 128));

修改為:

addcolumn("dbo.abpeditions", "price", c => c.int(nullable: false, defaultvalue: 0));

addcolumn("dbo.abpeditions", "discriminator", c => c.string(nullable: false, maxlength: 128, defaultvalue: "myedition"));

這樣做的目的是為了讓myedition替換為現有的edition實體。

update-database

開啟表「abpeditions」看到的新字段:

然後我們可以看到現有的標準版的**被myedition修改為0。

有關遷移的最後一件事情就是 seed code 中。我們需要進行修改entityframework\migrations\seed\defaulteditioncreator.cs:

defaultedition = new edition ;
修改為

defaultedition = new myedition ;
因此,我們建立新資料庫的時候,會建立myedition實體。

所以我們的需要把**屬性新增到「editionlistdto」中:

[automapfrom(typeof(edition), typeof(myedition))]

public class editionlistdto : entitydto, ihascreationtime

}

,

,

然後執行專案:

OOP中擴充套件實體的應用

為什麼要對實體擴充套件 原因問題 查詢所有的學生資訊,同時包括 姓名 性別 年齡 學習的課程 分析 查詢結果是屬於多個不同實體物件的資訊重組 當前問題 我們沒有定義能夠封裝不同實體物件資訊的實體類 結論不可能根據使用者查詢的要求進行單獨設計查詢實體類 如果單獨設計的實體類面對使用者的不同需求,經不起...

在 XML 中新增實體

簡介 xml 是一種受到良好支援的 internet 標準,用於以一種特殊方式編碼結構化資料 xml 編碼的資料幾乎能夠用所有程式語言輕鬆解碼,甚至可以使用標準文字編輯器由人類閱讀或編寫。許多應用程式,特別是遵循現代標準的 web 瀏覽器,都可以直接處理 xml 資料。xml 中的實體用於表示特殊字...

滿足頁面賦值的需求在實體類中增加get方法

問題描述 後台返回及資料庫中儲存的itemimage欄位內容為 itemimage 業務需求 for cart cart cartlist 但是這樣的話,以後每次要用到這個欄位都要寫一遍 重複了,解決方法還可以在實體類中新增額外增加get方法進行處理就可以了 public string getite...