一、实体:
此处跟Framework无差,写法上如下
using System;
namespace Entities
{
public class sys_account {
public string account{ get; set; }
public string name{ get; set; }
public string nickname{ get; set; }
public string password{ get; set; }
public string email{ get; set; }
}
}
二、配置映射
.NetCore2.0下的FluentAPI无法类似Framework一样通过继承EntityTypeConfiguration来配置实体而是改为需要实现IEntityTypeConfiguration通过Configure方法进行配置
如果找不到ToTable方法,可以在NuGet上安装Microsoft.EntityFrameworkCore.Relational,注意安装包版本要和你的EFCore版本相同!
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
namespace DDD.Data.MapConfig
{
public class sys_accountMap : IEntityTypeConfiguration<sys_account>
{
public void Configure(EntityTypeBuilder<sys_account> builder)
{
builder.ToTable("sys_account", "db_admin")//db_admin为数据库架构,原始架构可以不填
.HasKey(c=>c.account);
//多主键映射如下
//.HasKey(c=>new{ c.account,c.name });
}
}
}
三、配置上下文
在配置上下文上core2.0提供了modelBuilder.ApplyConfiguration方法,替代Framework中的modelBuilder.Configurations.AddFromAssembly
using Entities;
using Microsoft.EntityFrameworkCore;
using System;
using System.Linq;
using System.Reflection;
namespace Data
{
public class dbEntities : DbContext
{
public oaEntities(DbContextOptions<dbEntities> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
var typesToRegister = Assembly.GetExecutingAssembly().GetTypes()
.Where(q => q.GetInterface(typeof(IEntityTypeConfiguration<>).FullName) != null);
foreach (var type in typesToRegister)
{
dynamic configurationInstance = Activator.CreateInstance(type);
modelBuilder.ApplyConfiguration(configurationInstance);
}
base.OnModelCreating(modelBuilder);
}
/// <summary>
/// 账号目录
/// </summary>
public DbSet<sys_account> sys_account { get; set; }
}
}
以下文字可能有些地方表述上不标准,请见谅