更多
2020年06月14日 12点01分 作者:叶飞 修改

分层架构:利弊分析和选择

为什么需要分层?代码太多,需要组织:分层架构属于“纵向”组织。(组织代码/人手)题外话:为什么飞哥不看好“微服务”?本来就是“新瓶装老酒”(横向组织) 过犹不及 职责分离(单一职责),方便项目组织维护,甚至是重用。典型的就是目前流行的“前后端分离”:前端不需要懂C#/.NET/SQL……,后端不需要懂HTML/CSS/Javascript后端的API可以被:桌面网页、手机网页、手机APP以及其他终端(UI)重复使用其他作用:封装/统一协调/屏蔽细节……名言:没有什么是分层不能解决的,如果分层还不能解决,就 ……

分层架构 选择 利弊
2020年06月13日 23点27分 作者:叶飞 修改

Action和ViewResult:ViewName/Model传值

Controller中返回ActionResult的方法。一个Controller中可以有多个Action方法:重载的方法可以标记[HttpPost]/[HttpGet]等进行区分。但仅仅是[HttpPost]/[HttpGet]不能形成“重载”的效果(即不能用[HttpPost]/[HttpGet]等特性来区分方法)ViewResult 通过 return View() 返回,是最最常见的内容,返回整个页面。View的参数无参数(默认)return View()会去Views文件夹下面寻找:和它所在的c ……

Action参数 ViewName
2020年06月04日 23点15分 作者:叶飞 修改

EF:继承和多态

继承的映射 只有当父类子类都需要被映射时,才会启动继承class MyContext : DbContext{public DbSet<Blog> Blogs { get; set; }public DbSet<RssBlog> RssBlogs { get; set; }}public class RssBlog : Blog{public string RssUrl { get; set; }}还可以使用include或者protected override void OnMo ……

EF 映射 配置 继承
2020年06月04日 23点13分 作者:叶飞 修改

EF:关联对象:映射和加载

我们之前已经分别学习过:ER关系模型在对象(引用)和数据库(外键)上的表现形式。EF在构建Entity对象间关系时,采用了一种“混搭”的方式,引入了:影子属性比如每个Student都应该一个Classroom,就可以这样表示:public class Student : BaseEntity{//EF映射之后,StudyInId对应着Student表中的StudyInId列//如果严格按面向对象的要求,StudyInId就是多余的public int StudyInId { get; set; }//如果 ……

EF 配置 主键 约束
2020年06月04日 23点06分 作者:叶飞 修改

C#进阶:Entity和Repository

对象引用面向对象的世界里,万物皆对象。对象和对象之间的关系除了“继承”,就是“组合”(复习)。 这些关系通过对象的属性体现。比如:class Student{//一个学生有一个老师public Teacher Teacher { get; set; }}class Student{//一个学生有多个老师public IList<Teacher> Teacher { get; set; }}这就被称之为:引用或依赖,比如:Student引用了TeacherTeacher被Student引用Stu ……

Entity Repository模式
2020年06月04日 23点04分 作者:叶飞 修改

【已合并】性能:原理/缓存/批量/NoTrack……

多个Repository从一个错误开始运行在SuggestService.Publish()中的如下语句Suggest suggest = new Suggest{Author = new UserRepository().GetById(authorId),//导致异常的语句Body = body,Title = title,//PublishedTime = DateTime.Now};suggest.Publish();return _suggestRepository.Save(suggest); ……

EF DbContext
2020年06月04日 21点03分 作者:叶飞 修改

EF core:单个Entity:基本增删改查 / ChangeTracker

EF的DbContext和DbSet都提供了作用于Entity的、基本的、“对象化”的、“集合化”的增删改查方法:Add/AddRange()Remove/RemoveRange()Update()SaveChanges()说明:如果使用DbContext调用,建议使用泛型参数指定EntityRange后缀表明可以一次操作多个Entity但是,要多加小心,这些方法不能够“望文生义”!增StudentRepository repository = new StudentRepository();Studen ……

EF 增删改查 ChangeTracker
2020年06月04日 11点00分 作者:叶飞 修改

EF core:Logger / Factory / 条件编译

引入Logger为了便于观察,我们需要引入Logger了。在实际的开发和维护中,logger也有着重要的作用。在OnConfiguring()中导入一个ILoggerFactory的实现:optionsBuilder.UseSqlServer(connString)#if DEBUG//仅在调试状态使用.EnableSensitiveDataLogging(true)#endif.UseLoggerFactory(new LoggerFactory(new ILoggerProvider[]{//new ……

EF Logger 条件编译
2020年06月04日 10点57分 作者:叶飞 修改

ADO.NET:强类型DataSet:继承 / 组合

上述操作无论是从DataSet找到DataTable,还是从DataTable到行列值,都要使用字符串定位,这是非常容易出错的。所以微软退出了强类型(Typed)的DataSet,而且提供了可视化的操作方式:在项目上右键:Add New Item,然后选择DataSet,命名为Ds17bang,就能生成一个强类型的DataSet:比较这两种写法:DataSet ds17bang = new Ds17bang();object oId = ds17bang.Tables["Student"].Rows.F ……

强类型 DataSet
2020年05月28日 22点32分 作者:叶飞 修改

ADO.NET进阶:SQL注入/参数化查询/存储过程/事务

SQL注入使用拼接字符串,会造成SQL注入的问题:INSERT [USER]([Name],[Password]) VALUES('1234','1234',4567) UPDATE [User] SET [Password]='8888'--');恶意输入内容:-- 1234',4567) UPDATE [User] SET [Password]='8888'--(演示:略) 所以,我们总是使用参数化查询SqlCommand saveUser = new SqlCommand("INSERT [USER ……

SQL注入 参数化查询 存储过程
关键字



帮助

反馈