本教程是一步一步指南以了解如何新增新的屬性,對現有的實體,從資料庫層和 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...