当前位置: 首页 > news >正文

宝宝投票网站怎么做的短期培训班学什么好

宝宝投票网站怎么做的,短期培训班学什么好,物流网站建设模板下载,泰兴城乡建设局网站前言之前有学过EF一段时间那时EF才4.0似乎还不太稳定#xff0c;而现在EF都已7.0版本#xff0c;同时AspNet Identity都与此大有关联#xff0c;看来是大势所趋于是开始学习EF#xff0c;在学EF过程中也遇到一些小问题#xff0c;特此录下#xff0c;以备忘#xff01;数…前言之前有学过EF一段时间那时EF才4.0似乎还不太稳定而现在EF都已7.0版本同时AspNet Identity都与此大有关联看来是大势所趋于是开始学习EF在学EF过程中也遇到一些小问题特此录下以备忘数据库和表基本创建为了更好的循序渐进稍微概括下典型创建EF Code First过程(看之即懂懂即略过)第一步先定义两个类如下public classStudent{publicStudent(){}public int StudentID { get; set; }public string StudentName { get; set; }}public classStandard{publicStandard(){}public int StandardId { get; set; }public string StandardName { get; set; }}第二步继承EF上下文DbContextpublic classSchoolContext : DbContext{public SchoolContext():base(nameDBConnectionString){}public DbSet Students { get; set; }public DbSet Standards { get; set; }protected override voidOnModelCreating(DbModelBuilder modelBuilder){base.OnModelCreating(modelBuilder);}}学生上下文中构造函数中的name去读取如下配置文件来命名数据库名称 DBByConnectionString然后在控制台中通过EF上下文添加数据并保存如下using (var ctx newSchoolContext()){Student stud new Student() { StudentName New Student};ctx.Students.Add(stud);ctx.SaveChanges();}最终生成数据库以及表如下图上述创建数据库的过程只需注意可以手动通过添加构造函数的name来命名数据库名称或者无需添加name那么生成的数据库名称是以上下文中的命名空间上下文类来命名数据库名称。数据库创建以及表一劳永逸配置下面创建方法是看过园友hystar(EF教程)而写的确实是好方法就搬过来了为什么说一劳永逸呢不明白的话可以去看看他的文章首先添加两个类Student(学生类)和Course(课程类)。public classStudent{public int ID { get; set; }public string Name { get; set; }public int Age { get; set; }public virtual Course Course { get; set; }}public classCourse{public int StudentID { get; set; }public string Name { get; set; }public virtual Student Student { get; set; }}添加EFDbContext类并继承DbContext上下文代码如下public classEntityDbContext : DbContext{publicEntityDbContext():base(nametest2){ }/// ///通过反射一次性将表进行映射/// /// protected override voidOnModelCreating(DbModelBuilder modelBuilder){var typesRegister Assembly.GetExecutingAssembly().GetTypes().Where(type !(string.IsNullOrEmpty(type.Namespace))).Where(type type.BaseType ! null type.BaseType.IsGenericType type.BaseType.GetGenericTypeDefinition() typeof(EntityTypeConfiguration));foreach (var type intypesRegister){dynamic configurationInstanceActivator.CreateInstance(type);modelBuilder.Configurations.Add(configurationInstance);}}}由于是手动命名数据库名称当然得读取配置文件上述配置要添加的数据库建立在VS2013自带的实例中我们首先初始化数据库看看EntityDbContext ctx newEntityDbContext();结果运行就出现如下经典错误在与SQLServer建立连接时出现与网络相关的或特定与实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且SQL SERVER已配置允许远程链接provide:命名管道提供程序,error:40 -无法打开到SQL Server的连接)那肯定是无法连接到 (localdb)\v11.0 于是当我在服务器打开添加连接中添加服务器名为 (localdb)\v11.0 时也是无法响应连接不到最终通过SqlLocalDB命令在Command Prompt(命令行)中输入SqlLocalDB.exe start v11.0启动该实例才算完事主要原因是安装了SQL 2012默认启动的实例该SQL 2012而VS 2013中的实例被停止运行得手动启动如果要查看其信息来查看是否已经启动通过以下命令即可SqlLocalDB.exe info v11.0VS2013中默认的实例应该是(localdb)\v11.0如果在服务器中添加连接输入(localdb)\v11.0是错误的你可以通过上述 SqlLocalDB.exe info v11.0 命令复制并添加如图的字符串即可似乎只要第一次启动了以后每次都会连接上不会再出现如上问题上述中我们对于EF上下文不用每次都初始化数据库在EF中初始化数据库有三种策略CreateDatabaseIfNotExists该项也是默认初始化数据库的一项要是数据库不存在就创建数据库。DropCreateDatabaseIfModelChanges只要数据模型发生了改变就重新创建数据库。DropCreateDatabaseAlways只要每次初始化上下文时就创建数据库。鉴于此我们在EFDbContext中采用第二种策略。创建一个初始化类的策略 EFDbContextInit/// ///当对象实体对象发生改变时重生创建数据库/// public class EntityDbContextInit : DropCreateDatabaseIfModelChanges{protected override voidSeed(EntityDbContext context){base.Seed(context);}}在EFDbContext静态构造函数中进行初始化此方法staticEntityDbContext(){Database.SetInitializer(newEntityDbContextInit());}自此EFDbContext构建完毕下面就是模型映射了我们假设学生和课程是1:1关系则我们添加的两个实体映射如下StudentMap(学生类实体映射)public class StudentMap : EntityTypeConfiguration{publicStudentMap(){ToTable(Student);HasKey(dd.ID);//HasRequired(p p.Course).WithRequiredDependent(i i.Student);//HasRequired(p p.Course).WithOptional(i i.Student);HasRequired(p p.Course).WithRequiredPrincipal(p p.Student);HasOptional(p p.Course).WithRequired(p p.Student);/*对于上述映射关系不太理解的话可以去上述给出链接文章。我只说明怎么去很好的理解这两组的意思第一组 WithRequiredDependent 和第二组WithRequiredPrincipal 一个是Dependent是依赖的意思说明后面紧接着的Student是依赖对象而前面的Course是主体而Principal首先的意思说明后面紧接着的是Student是主体而Course是依赖对象。很显然在这个关系中课程是依赖学生的。所以映射选第二组*/}}CourseMap(课程类映射)public class CourseMap : EntityTypeConfiguration{publicCourseMap(){ToTable(Course);HasKey(pp.StudentID);}}接下来我们进行添加数据并保存通过如下代码EntityDbContext ctx newEntityDbContext();var s newStudent(){Name 1,Age 12,Course new Course() { Name 12}};ctx.Set().Add(s);ctx.SaveChanges();数据添加和保存都已通过接下来进行查询数据查询数据有两种方式(1)直接通过EF中Set()方法获得数据集合(2)通过EF中SqlQuery()方法通过sql语句查询如要获得上述学生数据列表集合可以通过如下操作:EntityDbContext ctx newEntityDbContext();var list ctx.Set().ToList();或者SqlParameter[] parameter{ };var list ctx.Database.SqlQuery(select * from student, parameter);于是我监视下返回的list集合中的数据类型如图ohshit!和我们实际的实体类型不符通过EF产生的却是 DynamicProxies 于是到Sytem.Data.Entity类下去看看是个什么类型居然没找到估计看这单词意思就是运行时产生的动态代理对象。那么你觉得是不是没什么影响了那影响可大了请看下面操作var list ctx.Set().ToList();var jsonString JsonConvert.SerializeObject(list);我尝试将其序列化看看结果一运行ohno!错误如下这意思是检测到在Course里面有Student属性而Student类里又有Course这就相当于自己引用自己导致了循环引用就成了死循环。(这就是因为 DynamicProxies 导致的结果)所以当前要将其代理对象转换为我们的实体对象即可。则通过Select()方法投影将其代码进行改造后如下var list ctx.Set().Include(p p.Course).ToList().Select(entity new Student() { ID entity.ID, Name entity.Name, Age entity.Age }).ToList();或者var list ctx.Set().Include(Course).ToList().Select(entity new Student() { ID entity.ID, Name entity.Name, Age entity.Age }).ToList();对象转换成功如下序列化成功结果如下【注意】你用EF获得数据集合后得 ToList() 因为此时集合对象为代理对象否则进行转换将报错代码如下:var list ctx.Set().Include(p p.Course).Select(entity new Student() { ID entity.ID, Name entity.Name, Age entity.Age }).ToList();报错如下上述转换也叫DTO(Data Transfer Objects)数据转换为对象像这种情况在EF中很常见。下面给出老外的用两张图在两个常见的场景中来展现关于DTO的概念Getting Information: DALBLLGUIInsert Information: GUIBLLDAL总结(1)当安装了sql时则默认启动的是此实例那么VS中的实例则会停止启动需要通过SqlLocalDB命令进行启动。(2)通过EF获得的数据集合对象为代理对象需要先转换为实体对象才能进行序列化或者其他操作。补充在此感谢园友中华小鹰经其提示用上述一劳永逸配置无法配置复杂类型modelBuilder.Configurations.AddFromAssembly(Assembly.GetExecutingAssembly());通过上述代码既能配置实体类型也能配置复杂类型用此方法更加精简当然若你将复杂类型作为另一个类的导航属性时上述代码也是可以满足所需的
http://www.pierceye.com/news/627939/

相关文章:

  • 购物网站建设成本u9u8网站建设
  • 抚州市住房和城乡建设局网站手机网站素材
  • 用dw做音乐网站模板策划公司收费明细
  • 大气手机网站模板免费下载南昌seo排名
  • 做卖衣服网站源代码seo搜索引擎优化名词解释
  • 东营免费建网站网络运维必备知识
  • 盐城建设网站备案 网站负责人
  • 外贸营销网站怎么建设网站域名注册证书
  • 安徽网站建设首选-晨飞网络甘肃泾川县门户网站两学一做
  • 360°网站标签旋转显示特效建筑设计专业比较好的学校
  • 郫县建设局网站中文wordpress模版
  • 塔里木油田公司档案馆网站建设研究响应式网站建设教程
  • wordpress侧边栏怎么加php代码重庆seo优化公司
  • 自做建材配送网站做的比较好的游戏网站
  • 建设网站公司兴田德润在哪里秦皇岛海港区
  • 做网站阜阳百度投放广告
  • 北京互联网金融公司排名网站栏目优化
  • 教育网站解决方案用wordpress制作表单
  • 整站wordpress下载phpcms 网站标题
  • 湛江市建设局官网站品牌网络营销方法分析
  • 做网站数据库表各字段详情福建省港航建设发展有限公司网站
  • 潍坊 营销型网站建设游戏设计师网站有哪些
  • 用花生棒做网站快吗大型网站开发合同
  • 网站建设什么原因最主要wordpress mu安装
  • 龙岗网站设计公司价格wordpress商品属性选择
  • 企业网站如何优化足球比方类网站开发
  • 大型网站开发 优帮云公司制度建设的意义
  • 收录网站工具沈阳高端网站定制
  • 做网站哪家比较好网站网页翻页设计
  • 湖州建设网站制作手机网站登录模板