.netcore基于mysql的codefirst
此文僅是對于netcore基于mysql的簡單的codefirst實現的簡單記錄。示例為客服系統消息模板的增刪改查實現
第一步、創建實體項目,并在其中建立對應的實體類,以及數據庫訪問類
須引入Pomelo.EntityFrameworkCore.MySql和Microsoft.EntityFrameworkCore
///
///消息模板///
public classMessatgeTemplate
{///
///id///
[Key]public System.Guid Id { get; set; }///
///名稱///
[MaxLength(250)]public string Name { get; set; }///
///關鍵字///
[MaxLength(500)]public string Keywords { get; set; }///
///內容///
public string Content { get; set; }///
///語言///
[MaxLength(80)]public string CultureCode { get; set; }///
///類別///
[MaxLength(250)]public string Category { get; set; }///
///備注信息///
public string Remark { get; set; }///
///是否啟用///
public bool Enabled { get; set; }///
///創建時間///
public DateTime Created { get; set; }///
///最近修改時間///
public DateTime LastModified { get; set; }
}
///
///
///
public classCustomerServiceContext : DbContext
{public CustomerServiceContext(DbContextOptionsoptions)
:base(options)
{
}///
///配置///
///
protected override voidOnConfiguring(DbContextOptionsBuilder optionsBuilder)
{base.OnConfiguring(optionsBuilder);
}public virtual DbSet MessatgeTemplate { get; set; }
}
第二步、創建業務服務項目,添加對應的業務處理類
///
///客服業務統一接口///
public interfaceICustomerServicerSerice
{
}
///
///模板業務類///
public classMessageTemplateService : ICustomerServicerSerice
{privateCustomerServiceContext _CustomerServiceContext;publicMessageTemplateService(CustomerServiceContext customerServiceContext)
{this._CustomerServiceContext =customerServiceContext;
}///
///創建模板///
public voidCreateMessageTemplate()
{//todo create
}///
///修改模板///
public voidModifyMessageTemplate()
{//TODO modified
}///
///獲取模板///
///
public ListGetMessageTemplate()
{//TODO根據傳入參數查詢模板
return null;
}///
///刪除///
public voidDeleteMessageTemplate(Guid id)
{var template = _CustomerServiceContext.MessatgeTemplate.FirstOrDefault(p => p.Id ==id);if (template != null)
{
_CustomerServiceContext.MessatgeTemplate.Remove(template);
_CustomerServiceContext.SaveChanges();
}
}///
///批量設置是否可用///
///
///
public void BatchEnableTemplate(List ids, boolenabled)
{//TODO set enabled
}
}
第三步、創建webapi項目,并在其中建立對應的實體類,以及數據庫訪問類
須引入Microsoft.EntityFrameworkCore和Microsoft.EntityFrameworkCore.Design.
1、在appsettings.json中配置數據連接
"ConnectionStrings": {"CumstomerServiceConnection": "server=localhost;port=3306;database=CustomerServiceCenter;uid=root;pwd=root23456;CharSet=utf8"}
2、修改startup.cs類的ConfigureServices注入db訪問類
services.AddDbContext(p => p.UseMySql(Configuration.GetConnectionString("CumstomerServiceConnection")));
3、設置該webapi項目為啟動項目,在nuget程序包控制臺選擇第一步中創建的實體類項目依次運行如下腳本創建數據庫
1)add-migration init
2) update-database
上面的兩個命令中,add-migration表示添加數據遷移,其實就是將實體變更轉換成sql(add-migraion后面的init只是個名稱,可以自行定義),update-database是將生成的數據遷移信息更新到數據庫
另外一些可能用到的命令
remove-migration? ---將最近生成的遷移(沒有更新到數據庫的)移除掉
script-migration --生成數據庫遷移相應的腳本
------------------------
命令執行成功后,就可以在數據庫中找到創建好的數據庫和表了
script-datatable可以生成數據庫腳本語句
好了,以上就完成了codefirst的簡單操作了。不過跟著第二步的業務類其實沒啥關系!!!如果只是進行數據遷移確實沒有service層什么事,但是業務邏輯要走通,實現crud,業務層還是必須的。
---------------------------------------------------------------------------------------------------------------------
以下就順帶寫下controller中引入service,實現簡單的刪除業務邏輯(其它的業務邏輯---略)
在webapi創建MessageTemplateController
[Route("api/[controller]")]
[ApiController]public classMessageTemplateController : ControllerBase
{privateMessageTemplateService _MessageTemplateService;publicMessageTemplateController(MessageTemplateService messageTemplateService)
{this._MessageTemplateService =messageTemplateService;
}///
///刪除///
///
[HttpPost("DeleteMessageTemplate")]public voidDeleteMessageTemplate(Guid id)
{
_MessageTemplateService.DeleteMessageTemplate(id);
}//TODO其他操作:查詢,新增,修改等
}
修改Startup.cs類,注入服務
public voidConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddDbContext(p => p.UseMySql(Configuration.GetConnectionString("CumstomerServiceConnection")));#region 注入業務服務Assembly assembly= Assembly.Load("Qingy.DotNetCoreStudy.CustomerServiceService");
List types = assembly.GetTypes().Where(u => u.IsClass && !u.IsAbstract && !u.IsGenericType&& u.GetInterfaces().Any(p => p == typeof(ICustomerServicerSerice))
).ToList();foreach (var item intypes)
{
services.AddTransient(item);
}#endregion}
綜合以上,就可以將api到db的完整實現了。