亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

.Net Core 2.1 似乎忽略了 modelBuilder.Entity.Entity

.Net Core 2.1 似乎忽略了 modelBuilder.Entity.Entity

C#
jeck貓 2022-08-20 14:44:38
我有一個.net核心項目,其中包含模型,服務和api項目。我這個項目的最初目標是讓枚舉以一種更“代碼優先”的方式工作。我希望能夠修改枚舉并相應地更新數據庫和查找表。在花了太多時間試圖弄清楚如何做到這一點之后,我決定創建一個特殊的枚舉類,并使用“HasData”手動設定種子。我以前做過這個,沒有遇到過問題。我做的最后一個項目是.Net Core 2.1。此項目使用的是 2.2。我無法判斷我是否發現了一個奇怪的錯誤,或者我是否只是做錯了什么。我的“服務”項目是DbContext所在的位置,大多數相關代碼都在。我有一個模型,看起來像:public class Employee : IEmployee{    [Key]    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]    [Display(Name = "Id")]    public int Id { get; set; }    [StringLength(512, ErrorMessage = "The first name cannot be longer than 512 characters")]    [Display(Name = "First Name")]    [Required]    public string FirstName { get; set; }    [StringLength(512, ErrorMessage = "The last name cannot be longer than 512 characters")]    [Display(Name = "Last Name")]    [Required]    public string LastName { get; set; }    public Department Department { get; set; }}它有一個枚舉:public enum Department{    [Description("Sales")]    Sales = 1,    [Description("Customer Service")]    CustomerService = 2,    [Description("Technical Support")]    TechnicalSupport = 3}我創建了一個與枚舉相對應的模型,如下所示:[Table("Department")]public class DepartmentEnum : EnumBase<Department>{    public DepartmentEnum()    {    }}它有一個基類,如下所示:public class EnumBase<TEnum> where TEnum : struct{    [Key]    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]    public virtual int Id { get; set; }    [Required]    [MaxLength(100)]    public virtual string Name { get; set; }    [MaxLength(100)]    public virtual string Description { get; set; }    public virtual bool Deleted { get; set; } = false;}在本節中,我將播種我想要在此表中的數據。由于服務項目無法直接啟動,也無法了解它的連接字符串,因此我創建了一個從它繼承的字符串,如下所示:無論我做什么,創造的“HasData”藥水永遠不會存在。我嘗試將db上下文切換到普通的。我嘗試通過首先添加員工表,然后返回并添加部門表作為第二次遷移來更改事件的順序。似乎我所做的任何事情都不會讓遷移包含種子數據。DbContext任何人都可以發現我的問題嗎?
查看完整描述

1 回答

?
RISEBY

TA貢獻1856條經驗 獲得超5個贊

您應該注意編譯器警告。

這里

protected internal virtual void OnModelCreating(ModelBuilder modelBuilder)

您正在隱藏基方法(必須有一個編譯器警告告訴它)。當然,EF Core 基礎結構不是調用你的方法,而是調用類中定義的方法。OnModelCreatingDbContext

因此,無論你放在那里什么都沒有效果 - 表是基于EF Core約定創建的,當然也沒有數據種子。Department

將方法簽名更改為

protected override void OnModelCreating(ModelBuilder modelBuilder)

并確保致電

base.OnModelCreating(modelBuilder);

在最開始。當您繼承(或除 不執行任何操作之外的任何基上下文類)時,這一點尤其重要。IdentityContextDbContext


查看完整回答
反對 回復 2022-08-20
  • 1 回答
  • 0 關注
  • 115 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號