1.配置实体与数据表的关系
新建一个类:UserConfiguration.cs
/// <summary>
/// UserConfiguration
/// </summary>
public class UserConfiguration : EntityTypeConfiguration<UserEntity>
{
public UserConfiguration()
{
//设置映射的表名和所属的架构
ToTable("User", "dbo");
//设置主键
HasKey(item => item.Id);
//自增长
Property(item => item.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
设置一对多的关系以及外键(必须存在外键数据)
//HasMany(item => item.ExtentionList).WithRequired(item => item.User).HasForeignKey(item => item.UserId);
//设置属性的类型及长度
Property(item => item.Name).HasColumnType("nvarchar").HasMaxLength(20);
}
}
2.新建DbContext文件,StewardDataContext.cs,文件继承自:dbContext
此文件夹只需要重写
OnModelCreating
方法,如下图
/// <summary>
/// StewardDataContext
/// </summary>
public class StewardDataContext: DbContext
{
/// <summary>
/// 构造函数
/// </summary>
public StewardDataContext() : base("default")
{
}
/// <summary>
/// 带参数构造函数
/// </summary>
/// <param name="connectionString"></param>
public StewardDataContext(string connectionString) : base(connectionString)
{
}
/// <summary>
///
/// </summary>
/// <param name="modelBuilder"></param>
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//移除一对多的级联删除关系
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
//移除表名复数形式
modelBuilder.Conventions.Remove<PluralizingEntitySetNameConvention>();
//配置实体和数据表的关系
modelBuilder.Configurations.Add(new UserConfiguration());
modelBuilder.Configurations.Add(new UserExtentionConfiguration());
}
}
3.新建数据库初始化配置文件:Configuration.cs
/// <summary>
/// 数据库初始化
/// </summary>
internal sealed class Configuration : DbMigrationsConfiguration<StewardDataContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;//启用自动迁移
AutomaticMigrationDataLossAllowed = false;//不允许接受数据丢失的情况,如果存在则抛异常
}
protected override void Seed(StewardDataContext context)
{
//#region 用户
用户
//var user = new List<UserEntity>
//{
// new UserEntity
// {
// Name = "管理员"
// }
//};
//#endregion
//AddOrUpdate(context, m => m.Name, user.ToArray());
}
#region Private
/// <summary>
/// 添加更新数据
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="context"></param>
/// <param name="exp"></param>
/// <param name="param"></param>
private void AddOrUpdate<T>(DbContext context, Expression<Func<T, object>> exp, T[] param) where T : class
{
DbSet<T> set = context.Set<T>();
set.AddOrUpdate(exp, param);
}
#endregion
}
4.新建初始化类:DatabaseInitializer.cs
/// <summary>
/// 数据库初始化操作类
/// </summary>
public static class DatabaseInitializer
{
/// <summary>
/// 数据库初始化
/// </summary>
public static void Initialize()
{
Database.SetInitializer(new MigrateDatabaseToLatestVersion<StewardDataContext, Configuration>());
}
}
使用方法,在Global.asax文件,或者Startup.cs文件中调用数据库初始化方法:
public class MvcApplication : HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
//根据变更,初始化数据库
DatabaseInitializer.Initialize();
}
}
页面使用方法:
List<UserEntity> list;
using (var db = new StewardDataContext())
{
var ds = db.Set<UserEntity>();
var user = new UserEntity
{
Name = string.Format("J{0}",
new Random(DateTime.Now.ToFileTime().GetHashCode()).Next(0, 999).ToString().PadLeft(3, '0'))
};
ds.Add(user);
db.SaveChanges();
ViewBag.TotalCount = ds.Count();
加载本身的数据,以及外键的数据
//var queryable = ds.AsNoTracking().Include("ExtentionList").OrderByDescending(item => item.Id).Skip(0).Take(10);
//只加载本身数据,不包含外键的数据
var queryable = ds.AsNoTracking().OrderByDescending(item => item.Id).Skip(0).Take(10);
list = queryable.ToList();
}