C#MVC EF之code-First
使用EF code First Nuget控制台进行数据库迁移,如果你的框架封装好的可以直接用。
接着在我们的EntityDBContext中映射我们的数据库上下文
public class EntityDbContext : IdentityDbContext<ApplicationUser,ApplicationRole,string>
{
public EntityDbContext(DbContextOptions<EntityDbContext> options) : base(options)
{
}
public DbSet<Family> Families { get; set; }
public DbSet<SchoolClass> SchoolClasses { get; set; }
///这里只举两个例子
}
然后我们去实体类创建我们的类和字段、
namespace EMIS.Entities.FamilyMessageSystem
{
/// <summary>
/// 家庭类
/// </summary>
public class Family : IEntity
{
public Guid ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string SortCode { get; set; }
[Key]
public Guid FamID { get; set; } //家庭id
[StringLength(50)]
public string FamilyName { get; set; } //家庭名称
[StringLength(20)]
public string Originator { get; set; } //家庭创始人(家长)
[StringLength(50)]
public string Address { get; set; } //家庭地址
[StringLength(500)]
public string FamilyBrief { get; set; } //家庭简要说明
public Family()
{
this.ID = Guid.NewGuid();
}
}
}
在设置好的Startup类中依赖注入服务清单
public class Startup
{
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
if (env.IsDevelopment())
{
builder.AddUserSecrets<Startup>();
}
builder.AddEnvironmentVariables();
Configuration = builder.Build();
}
public IConfigurationRoot Configuration { get; }
// 向APP容器添加服务,运行时调用
public void ConfigureServices(IServiceCollection services)
{
// 添加 EF Core 框架
services.AddDbContext<EntityDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("EMISConnection")));
// 添加微软自己的用户登录令牌资料
services.AddIdentity<ApplicationUser, ApplicationRole>()
.AddEntityFrameworkStores<EntityDbContext>()
.AddDefaultTokenProviders();
// 添加框架服务
services.AddMvc();
// 配置 Identity
services.Configure<IdentityOptions>(options =>
{
#region 密码策略的常规设置
options.Password.RequireDigit = true; // 是否需要数字字符
options.Password.RequiredLength = 6; // 必须的长度
options.Password.RequireNonAlphanumeric = true; // 是否需要非拉丁字符,如%,@ 等
options.Password.RequireUppercase = true; // 是否需要大写字符
options.Password.RequireLowercase = true; // 是否需要小写字符
#endregion
// 登录尝试锁定策略
options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(30);
options.Lockout.MaxFailedAccessAttempts = 10;
#region Core 1.x 的 Cookie 设置
// Core 1.x 的 Cookie 设置,适用于早期版本的 Identify
//options.Tokens.ProviderMap.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromDays(150);
//options.Cookies.ApplicationCookie.LoginPath = "/Account/LogonFromAction"; // 缺省的登录路径
//options.Cookies.ApplicationCookie.LogoutPath = "/Home/Index"; // 注销以后的路径
#endregion
// 其它的一些设置
options.User.RequireUniqueEmail = true;
});
// Core 2.0 的 Cookie 信息设置
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(options =>{
options.LoginPath = new PathString("Account/LogonFromAction");
options.AccessDeniedPath = new PathString("Account/AccessDenied");
});
#region 配置授权策略
services.AddAuthorization(options =>
{
// 使用角色配置策略,多个系统角色,RequireRole("Operations","Students","Teachers")
options.AddPolicy("系统管理员", policy => policy.RequireRole("Operations"));
// 使用声明配置策略,多个声明,RequireClaim("系统管理","1","2")
options.AddPolicy("系统管理", policy => policy.RequireClaim("系统管理"));
});
#endregion
#region 控制器或者其它需要依赖注入的服务清单
services.AddTransient<IEntityRepository<SystemWorkPlace>, EntityRepository<SystemWorkPlace>>();
services.AddTransient<IEntityRepository<SystemWorkSection>, EntityRepository<SystemWorkSection>>();
services.AddTransient<IEntityRepository<SystemWorkTask>, EntityRepository<SystemWorkTask>>();
services.AddTransient<IEntityRepository<Family>, EntityRepository<Family>>();
转回到Nuget控制台,依次执行以下两条命令语句
Add-Migration -Name "EMIS008" -Project "EMIS.DataAccess" -StartupProject "EMIS.Web"
Update-Database -Migration "EMIS008" -Project "EMIS.DataAccess" -StartupProject "EMIS.Web"
如果发现数据库中还没有相应的表的话,删除Migrations文件夹下对应的迁移日志,删除数据库,再执行上面两条命令语句,若要详细过程说明请参考大神的博客https://www.cnblogs.com/libingql/p/3330880.html