EF Core有三种常见模型来加载关联数据: 预先加载:表示从数据库中加载关联数据,作为初始查询的一部分 显式加载:表示稍后从数据库中显式加载关联数据 延迟加载:表示在访问关联数据时,再从数据库中加载关联数据...; } public virtual ICollection Posts { get; set; } } public class Post { public int Id...EF Core还提供了不使用代理的方式进行延迟加载,此方法需要向实体类中注入ILazyLoader实例,并通过该实例实现get访问: public class Blog { private ICollection...LazyLoader { get; set; } public int Id { get; set; } public string Name { get; set; } public ICollection...,如果我们不需要跟踪查询返回的实体,则可以通过AsNoTracking方法禁用跟踪。
让我们从创建Cart和Item类开始。...【实体类型“CartItem”需要定义一个主键。】 对,CartItem没有主键, 由于它是多对多关系,因此它应该具有复合主键。复合主键类似于常规主键,但它由两个属性(列)而不是一个属性组成。...可以使用两个类的主键ID进行关联 var cartItem = new CartItem { CartId = cart.Id, ItemId = item.Id }; // 也可以使用两个类实体进行关联...从多对多中删除 删除是指删除购物车Cart和商品Item之间的关系CartItem。...让我们从购物车Cart中删除单个产品Item开始。
首先就是实体类的建立: public class Post { public int PostId { get; set; } public string Title { get; set...; } public ICollection PostTags { get; } = new List(); } public class Tag {...public int TagId { get; set; } public string Text { get; set; } public ICollection...我们只是通过多建立了一个表,将两个实体类的Id作为联合主键。 在Identity框架中,如果你细心点,你会发现有个userroles表,这个表是就是用来做Users表和Roles表的映射的。...那么接下来我们只要新建一个实体类,随后在上下文类中映射到表: modelBuilder.Entity.ToTable("userroles"); 这样就可以了。
我们先创建ShoppingCart和Commodity实体类。...public class ShoppingCart { public int Id { get; set; } public ICollection Commoditys...{ get; set; } public string Name { get; set; } public int Quantity { get; set; } public ICollection...ShoppingCartCommodity { ShoppingCartId = shoppingCart.Id, CommodityId = commodity.Id }; // 放法2:使用两个类实体关联...ShoppingCart= cart, Commodity= item }; db.Add(shoppingCartCommodity2); db.SaveChanges(); 三、查 从数据库中获取数据只需使用
Ddd { get; set; } public string Name { get; set; } public virtual ICollection Songs {...get; set; } public virtual ICollection Tags { get; set; } } 以上定义了三个实体,Song、Tag,以及中间表SongTag。...//FROM [Song] a //ORDER BY newid() 更多前往wiki:《Expression 表达式函数文档》 完整特性 支持 CodeFirst 迁移; 支持 DbFirst 从数据库导入实体类...,支持三种模板生成器; 采用 ExpressionTree 高性能读取数据; 支持深入的类型映射,比如pgsql的数组类型,堪称匠心制作; 支持丰富的表达式函数; 支持导航属性查询,和延时加载; 支持同步....UseLazyLoading(true) //开启延时加载,导航属性 .UseMonitorCommand(cmd => Trace.WriteLine
大家好,又见面了,我是全栈君 1.如果可能尽量使用接口来编程 .NET框架包括类和接口,在编写程序的时候,你可能知道正在用.NET的哪个类。...= 0; i < items.Length;i++) 4 l.Items.Add (items[i].ToString ()); 5 } 这个函数从一个可为任何对象的数组中加载...如果你用ICollection接口来写那段程序,你就不用修改那段程序了,对于任何实现ICollection接口的类型它都能很好的工作: 1 private void LoadList (ICollection...ListBox l) 2 { 3 foreach (object o in items) 4 l.Items.Add (o.ToString ()); 5 } ICollection...此外,多维数组也支持ICollection接口。如果那还不够的话,数据库.NET类同样支持ICollection接口。用接口写的这个函数不用需改就可以才许多中情况下使用。 2.
(key); } /// /// Gets an public ICollection Keys { get {... public ICollection Values { get {...-or-The number of elements in the source </see...{ return ((IEnumerable)d).GetEnumerator(); } #endregion } 微软4.0框架已经有了这个线程安全的
BlogId { get; set; } public string Url { get; set; } // Collection navigation property 关联多个从表的属性集合...(集合属性) public List Posts { get; set; } } // Principal Entity 从表 public class Post { public...// Inverse navigation property 反向导航属性 public Blog Blog { get; set; } } 一对一 // Principal Entity 从表... Posts { get; set; } } 示例 一对多 30.jpg 一个 Project 对应多个 ProjectGroup 在 Project 实体中添加 ProjectGroup... Posts { get; set; } } 迁移的时候会自动生成中间表 联接实体类型配置 HasMany modelBuilder .Entity() .HasMany
BlogId { get; set; } public string Url { get; set; } // Collection navigation property 关联多个从表的属性集合...(集合属性) public List Posts { get; set; } } // Principal Entity 从表 public class Post { public...// Inverse navigation property 反向导航属性 public Blog Blog { get; set; } } 一对一 // Principal Entity 从表...一个 Project 对应多个 ProjectGroup 在 Project 实体中添加 ProjectGroup 列表 public List Groups { get;... Posts { get; set; } } 迁移的时候会自动生成中间表 联接实体类型配置 HasMany modelBuilder .Entity() .HasMany
这个约束产生的主要是原因是:一:使用了CSLA作为实现分布式应用的框架,所有实体集合,都需要继承BusinessListBase。...而对这个集合中的实体进行操作,经常会引起该实体的状态的改变;二:目前的OpenExpressApp框架中,要求实体直接绑定到表示层,而不能对它进行转换,如使用“ViewModel”。...所以该集合直接继承自ICollection。 ...这是因为代码的实现是在OpenExpressApp框架中,而在框架中实体类的操作有时候是针对泛型实体,有时候却针对非泛型实体。所以这里只好也把非泛型版本也一起定义了。...这样在下次从数据库中取出时,可简单的根据逻辑号进行物理排序,减少了时间消耗。
安装包 首先我们需要安装Microsoft.AspNetCore.Identity.EntityFrameworkCore这个包来创建我们的数据库结构 创建实体 在asp.net core identity...public virtual ICollection Tokens { get; set; } public virtual ICollection UserRoles { get; set; } public virtual ICollection RoleClaims { get; set...api/identity") .WithTags("Identity") .MapIdentityApi(); 这里需要注意的是,如果不先MapGroup,则我们的请求路径只直接从/...开始的,MapGroup("api/identity")则是指定从/api/identity开始。
4)Null:在Codefirst模式下,当实体结构改变时,运行程序不会自动生成表,改变实体结构与改变表结构互不影响, 前三种策略无法应对的问题是:分别改变实体模型和数据库表结构。...Codefirst模式下,实体与表之间的映射,随实体关系的不同而不同。...} public virtual ICollection Users { get; set; } ...... } public class User { public int...Id { get; set; } public virtual ICollection Publications { get; set; } ...... } EF框架对上述多对多关系的默认处理方式为生成三张表...解决方案: 添加一个实体,表达publications,user这两个实体之间的关系,实体如下: public class Publication { public int Id { get; set
/ 预先加载 预先加载表示从数据库中加载关联数据,作为初始查询的一部分。...显式加载表示稍后从数据库中显式加载关联数据。...延迟加载表示在访问导航属性时,从数据库中以透明方式加载关联数据。...例如,在以下实体中,Post.Blog 和 Blog.Posts 导航属性将被延迟加载。...这表示可以更改这些实体实例,然后通过 SaveChanges() 持久化这些更改。
预先加载 显式加载 延迟加载 加载相关数据:https://docs.microsoft.com/zh-cn/ef/core/querying/related-data/ 预先加载 预先加载表示从数据库中加载关联数据...显式加载表示稍后从数据库中显式加载关联数据。...延迟加载表示在访问导航属性时,从数据库中以透明方式加载关联数据。...例如,在以下实体中,Post.Blog 和 Blog.Posts 导航属性将被延迟加载。...这表示可以更改这些实体实例,然后通过 SaveChanges() 持久化这些更改。
前言 总是有很多朋友咨询Magicodes.IE如何基于ASP.NET Core导出Excel,出于从框架的体验和易用性的角度,Magicodes.IE决定对Excel的导出进行独立封装,以便于大家更易于使用...注意:Magicodes.IE是从框架的易用性和体验的角度对Excel导出进行了封装,但是希望大家先理解原理后再使用。...XlsxFileResult继承自ActionResult,目前支持字节数组、流和泛型集合为参数的Excel文件下载 支持传递下载文件名,参数名fileDownloadName,如不传则自动生成唯一的文件名 核心实现...在Magicodes.IE.Excel.AspNetCore中,我们添加了自定义的ActionResult——XlsxFileResult,核心参考代码如下所示: /// ...Data = data; } public string FileDownloadName { get; } public ICollection
导航属性 导航属性是作为.NET ORM核心功能中的核心,在SqlSugar没有支持导航属性前,都说只是一个高级DbHelper, 经过3年的SqlSugar重构已经拥有了一套 非常成熟的导航属性体系...1.复杂的查询过滤 用户根据权限过滤,用户根据组织过滤 等这种多对多情况用SQL就相当复杂 ,例如:用SQL写一个多对多过滤就要联3个表(主表 中间表 从表),如果 Where中用到多个多对多或者嵌套多对多那写...假设您有以下实体:人员(Person)、部门(Department)、职位(Position)、学历(Education)和工作经验(WorkExperience)。...Education) .Include(z1 => z1.WorkExperience) .ExecuteCommand();//导航插入 一句就能搞定,先插入主表,然后在根据主表的主键在插入从表...public virtual ICollection Students { get; set; } } public class StudentCourse { public int
1 概要 创建ASP.NET Web Api 时模板自带Help Pages框架。...2 问题 1)使用VS创建Web Api项目时,模板将Help Pages框架自动集成到其中,使得Web Api项目引入了MVC框架开发包,使得项目看起来杂乱。...2)自带的Help Pages框架无法针对Odata控制器生成API文档。... GetAssemblies() { //获得已有的服务 ICollection baseAssemblies...return View(apiDescriptions); } 注意:配置Odata路由时,将路由名称配置为控制器名称(不含Controller字符串),并且编写服务程序时,遵循一个实体对应一个控制器
示例 以下示例显示从非泛型 CollectionBase 类派生并与此规则产生冲突的类。...通过接口实现来解决 以下示例通过实现 IEnumerable、ICollection 和 IList 等泛型接口来解决冲突。....Add(Book item) { } bool ICollection.Contains(Book item) { return...true; } void ICollection.CopyTo(Book[] array, int arrayIndex) { } bool ICollection...Enumerator.Reset(); } public void Dispose() { } } } 通过基类更改来解决 以下示例通过将集合的基类从非泛型
前言 总是有很多朋友咨询Magicodes.IE如何基于ASP.NET Core导出Excel,出于从框架的体验和易用性的角度,决定对Excel的导出进行独立封装,以便于大家更易于使用,开箱即用。...注意:Magicodes.IE是从框架的易用性和体验的角度对Excel导出进行了封装,但是希望大家先理解原理后再使用。...XlsxFileResult继承自ActionResult,目前支持字节数组、流和泛型集合为参数的Excel文件下载 支持传递下载文件名,参数名fileDownloadName,如不传则自动生成唯一的文件名 核心实现...在Magicodes.IE.Excel.AspNetCore中,我们添加了自定义的ActionResult——XlsxFileResult,核心参考代码如下所示: /// ...Data = data; } public string FileDownloadName { get; } public ICollection
System.Collections.Immutable.ImmutableArray 此规则标记具有 Count 属性的以下集合类型上的 Count 调用: System.Collections.ICollection...System.Collections.Generic.ICollection System.Collections.Generic.IReadOnlyCollection 分析后的集合类型可能会在将来扩展...System.Linq; class C { public int GetCount(int[] array) => array.Count(); public int GetCount(ICollection...System.Collections.Generic; class C { public int GetCount(int[] array) => array.Length; public int GetCount(ICollection...从显示的选项列表中选择“在可用时使用 Length/Count 属性,而不是 Count()”。 何时禁止显示警告 如果不关心不必要的集合枚举计算计数对性能产生的影响,则可禁止显示此规则的冲突警告。
领取专属 10元无门槛券
手把手带您无忧上云