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






猜你喜欢

转载自blog.csdn.net/Dfame1588888/article/details/80046905