知识点随笔记录一

一、EF使用导航属性表关联,除了在Entity中以注解属性以及字段名默认约定设置外,还要在Controller的Action方法中用linq加载关联数据(Lazy loading、Eager loading、Explicit loading);
当然,如果项目中不用导航属性,那就用不着这些了。

二、待总结:windows服务;
三、linq  left join ,right join

四、MVC路由配置要点
    (规则:少了可以匹配,多了不能匹配)
    1,使用默认值
    2,使用静态URL片段
    3,自定义片段变量
    3.1,用自定义变量作为动作方法参数(模型绑定)
    4,定义可选URL片段
    5,定义可变长路由

    6,通过指定命名空间来设置路由顺序(如:多个项目时解决命名冲突)
       设置路由顺序还有另一种方法:路由全局优先级(Global优先级),如:

     注:Global优先级会被路由优先级重写。
 

    7,约束路由(对默认路由的controller和action用正则表示,以便更加精确地指定controller和action的值)
    8,对文件进行路由(以改变访问某一个文件得到的结果),如图像、html文件、js文件、等。
    但是,处于性能考虑,不推荐这种做法。
    9,绕过路由系统:
    routes.IgnoreRoute("Content/{filename}.html");
    
五、(数据访问层设计)数据访问层的4个职责:
    1,CRUD
    2,Query
    3,Transaction Management满足事务性需求
    4,Concurrency合理地处理并发问题。

六、如果是不严格按照DDD是设计上来说,返回IQueryable<T>的泛型仓储的确是无敌的,但是IQueryable<T>是返回查询分析器,不是结果。
七、关于EF Repository Context:
我选用了EF Code First作为ORM,实现了仓储(Repository)和仓储上下文(Repository Context),先来看看Repository Context。从技术实现角度分析,基于EF Code First的Repository Context封装了DbContext,这跟上文中的分析是一致的,从设计和框架应用的角度分析,基于EF Code First的Repository Context需要实现IRepositoryContext的接口,以便当服务定位器在解析并提供IRepositoryContext类型实例的时候,能够返回我们的EF Repository Context。

八、强类型的辅助方法,加For

九、使用Partial View有两类helper:
Html.Partial / Html.RenderPartial
Html.Action / Html.RenderAction

通过Html.Action/Html.RenderAction使用稍微复杂一点,分成两步。
在要显示的View所对应的Controller中心增加一个Action.
还用上面这个页面,我们在MVCDemoController.cs中增加一个Action
做个简单的说明:
[ChildActionOnly] 表示这个Action只应作为子操作进行调用。也就是说直接通过 controller/action这样的网址是不能访问的,会提示只能由子请求访问的错误。
必须返回一个PartialView
在View中添加相关代码

十、两种使用方式小结
当View中引用了一个或多个分部视图时,此View与各分部视图默认得到一样的数据,也就是说View及其中所有的Partial View默认情况下共享View中的ViewData和ViewBag.
需要使View和其中引入的Partial View有不同的数据,需要通过Html.Action/Html.RenderAction辅助方法, 并在对于被调用的Action中设置对应的数据。

另外还有几点需要注意:
XXX和RenderXXX的区别在于,一个是直接返回字符串,另外一个是直接写入到相应输出流,因此不能直接放在代码表达式中,必须放在代码块中。
前面的示例中两种写法是等价的。RenderXXX有轻微的性能优势,在大量的RenderXXX运行时,才能反映出性能上的优势。
Partial/RenderPartial通常在单独的文件夹中应用视图标记来帮助View渲染视图模型的一部分。
Action/RenderAction执行单独Controller中的Action来显示结果,提供了更多的灵活性,例如利用单独的Controller传递不同值。文章最后我们会举个例子说明。
Partial/RenderPartial和Action/RenderAction的参数分别是 partialView和 Action的名字。当然还有其他的重载函数,我们只说最常用的。

十一、linq to sql要点:
1、Not Contains则取反:
    var q = (
        from o in db.Orders
        where !(
        new string[] { "AROUT", "BOLID", "FISSA" })
        .Contains(o.CustomerID)
        select o).ToList();
2、包含一个对象:
    var order = (from o in db.Orders
                 where o.OrderID == 10248
                 select o).First();
    var q = db.Customers.Where(p => p.Orders.Contains(order)).ToList();
    foreach (var cust in q)
    {
        foreach (var ord in cust.Orders)
        {
            //do something
        }
    }
    语句描述:这个例子使用Contain查找哪个客户包含OrderID为10248的订单。
3、包含多个值:
    string[] cities =
        new string[] { "Seattle", "London", "Vancouver", "Paris" };
    var q = db.Customers.Where(p=>cities.Contains(p.City)).ToList();
    语句描述:这个例子使用Contains查找其所在城市为西雅图、伦敦、巴黎或温哥华的客户。

posted @ 2018-10-08 14:02  skybirdzw  阅读(148)  评论(0编辑  收藏  举报