EntityFramework(以下简称EF) 作为 .NET 广受欢迎的数据库操作中间件,支持了几乎所有你用过的关系型数据库,本文将非常基础的介绍其在 Mysql 中的使用。EF 常见的使用模式有三种:CodeFirst, ModelFirst, DBFirst;三种方式各有所特点,一般要根据实际的业务情况做选择。
在完全没有历史负担的情况下,选择 CodeFirst 更为普遍,在最新的 EntityFramework Core 中 CodeFirst 几乎是唯一的选择。本文将介绍如何使用 CodeFirst 创建和操作 Mysql 数据库,文中将以微信企业号的用户同步作为案例。IDE 使用 Visual Studio for Mac。
首先,使用 Mac 版 Visual Studio 创建一个 Console Application(.NET Core) 项目:EFCoreSample。使用 Nuget 增加 EFCore 以及 Mysql 所需要的包:
- Microsoft.EntityFrameworkCore
MySql.Data.EntityFrameworkCore
然后,由于本次例子中会使用到微信企业号的 API,我们直接引用第三方包来实现:
Senparc.Weixin
Senparc.Weixin.QY
第三步,在解决方案中新建一个 Models 文件夹,增加部门(Party),用户(User),标签(Tag)类,以及它们之间的相互关系部门标签(PartyTag),用户部门(UserParty),用户标签(UserTag)类,均为多对多关系。类的详细定义代码如下:
* 部门(Party) *
{% codeblock %}
public class Party
{
public Party()
{
UserPartys = new List();
PartyTags = new List();
}
/// <summary>
/// 部门Id
/// </summary>
[Key]
public int PartyId { get; set; }
/// <summary>
/// 部门名称
/// </summary>
[Required]
[StringLength(32)]
public string Name { get; set; }
/// <summary>
/// 在父部门中的次序值。order值小的排序靠前。
/// </summary>
public int Order { get; set; }
/// <summary>
/// 上级部门Id
/// </summary>
public int ParentPartyId { get; set; }
public List<UserParty> UserPartys { set; get; }
public List<PartyTag> PartyTags { set; get; }
}
{% endcodeblock %}
* 用户(User) *
{% codeblock %}
public class User
{
public User()
{
UserPartys = new List();
UserTags = new List();
}
/// <summary>
/// 员工UserID
/// </summary>
[Key]
[StringLength(32)]
public string UserId { get; set; }
/// <summary>
/// 头像url。注:小图将url最后的"/0"改成"/64"
/// </summary>
[StringLength(256)]
public string Avatar { get; set; }
/// <summary>
/// 邮箱
/// </summary>
[StringLength(256)]
public string Email { get; set; }
/// <summary>
/// 性别。gender=0表示男,=1表示女
/// &l