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

泰安市两学一做网站wordpress设置关键词

泰安市两学一做网站,wordpress设置关键词,网站开发语言都有什么,wordpress 发件邮箱前言之前有学过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.sadfv.cn/news/129139/

相关文章:

  • 深圳外贸英文网站设计公司哪家好江门提供网站制作平台
  • odoo 网站开发网站开发费用国家标准
  • 宝安设计公司网站推广优化建设
  • python h5网站开发网站上动画视频怎么做
  • 机票网站建设方总1340812wordpress单屏模板
  • H5建网站重庆网站制作机构
  • 医美行业网站建设广州网站建设公司排名
  • 阿里云服务器创建多个网站网页视频怎么下载下来
  • 网站优化包括对什么优化广西建设厅官方网站文件通知
  • 公司及企业如何建立自己的购物网站个人怎么做ckmov解析网站
  • 三合一网站源码asp网站开发视频教程
  • 学校资源网站建设手机手机端网站建设
  • 自己做的网站怎么发布到百度如何建设微信商城网站
  • 个人做电梯网站相亲网站怎么建设
  • 如何增加网站点击量生产企业做网站有用吗
  • 北京网站设计公司cg成都柚米科技15维拓设计在北京排名
  • 商城网站备案能通过吗哈尔滨排名seo公司
  • iis中的网站启动不了织梦网站代码
  • 网站建设的经费预算品牌网站建设保障大蝌蚪
  • 肇庆企业网站关键词优化教程网站的积分系统怎么做
  • 凤阳做网站o2o商城分销网站开发
  • flash网站建设淄博网站建设-至信网络
  • 有做公司网站的吗应遵循哪些原则
  • 专业的网站建设设计广州seo网站排名优化
  • 七冶建设集团网站 江苏东莞企石做网站
  • 深圳坪地网站建设 自助建站 五合一建站平台公司免费网站域名注册
  • 网站验收 流程wordpress小型论坛主题
  • dw个人网站建立教学wordpress图片像素
  • 太原市住房和城乡建设厅网站怎么在网站上做排名
  • 域名注册好如何做网站做网站不如做公众号