nhibernate

范例-项目-.NET-PetShop-4.0-架构设计:PetShop 4.0架构与技术分析(2)

帅比萌擦擦* 提交于 2020-04-14 11:54:19
【推荐阅读】微服务还能火多久?>>> ylbtech-范例-项目-.NET-PetShop-4.0-架构设计:PetShop 4.0架构与技术分析(2) 1. 返回顶部 1、 PetShop数据访问层之数据库访问设计 在PetShop中,系统需要处理的数据库对象分为两类: 一是数据实体,对应数据库中相应的数据表 。它们没有行为,仅用于表现对象的数据。这些实体类都被放到Model程序集中,例如数据表Order对应的实体类OrderInfo,其类图如下: 这些对象并不具有持久化的功能,简单地说,它们是作为数据的载体,便于业务逻辑针对相应数据表进行读/写操作。虽然这些类的属性分别映射了数据表的列,而每一个对象实例也恰恰对应于数据表的每一行,但这些实体类却并不具备对应的数据库访问能力。 由于数据访问层和业务逻辑层都将对这些数据实体进行操作,因此程序集Model会被这两层的模块所引用。 第二类数据库对象则是数据的业务逻辑对象 。这里所指的业务逻辑,并非业务逻辑层意义上的领域(domain)业务逻辑(从这个意义上,我更倾向于将业务逻辑层称为“领域逻辑层”),一般意义上说,这些业务逻辑即为基本的数据库操作,包括Select,Insert,Update和Delete。由于这些业务逻辑对象,仅具有行为而与数据无关,因此它们均被抽象为一个单独的接口模块IDAL

nhibernate常见错误

杀马特。学长 韩版系。学妹 提交于 2020-04-06 09:03:08
unitinfoDAOTest.unitinfoDAOTest.UpdateTest: SetUp : NHibernate.MappingException : Domain.unitinfo.hbm.xml(7,6): XML validation error: 元素 命名空间“urn:nhibernate-mapping-2.2”中的“class”。 的子元素 命名空间“urn:nhibernate-mapping-2.2”中的“property”。 无效。应为可能元素的列表: 命名空间“urn:nhibernate-mapping-2.2”中的“meta, subselect, cache, synchronize, comment, tuplizer, id, composite-id”。。 ----> System.Xml.Schema.XmlSchemaValidationException : 元素 命名空间“urn:nhibernate-mapping-2.2”中的“class”。 的子元素 命名空间“urn:nhibernate-mapping-2.2”中的“property”。 无效。应为可能元素的列表: 命名空间“urn:nhibernate-mapping-2.2”中的“meta, subselect, cache, synchronize,

Projection投影

你说的曾经没有我的故事 提交于 2020-03-15 01:47:57
解释一 Projection means choosing which columns (or expressions) the query shall return. Selection means which rows are to be returned. if the query is select a, b, c from foobar where x=3; then "a, b, c" is the projection part, "where x=3" the selection part. 解释二 In terms of query it is: SELECT *PROJECTION* FROM Table *PROJECTION* is expression for data transformation. Example: SELECT * FROM ORDER In Hibernate, the Criteria equivalent would be: List orders = session.createCriteria(Order.class).list(); No projection here, we take data without transformation. If we want one: SELECT NAME FROM

Nhibernate subquery with multiple columns join

扶醉桌前 提交于 2020-03-12 05:47:54
问题 I have database structure for Plans and PlanVersions in following relationship: +------+ +-------------+ | Plan | --------------> | PlanVersion | +------+ 1 (1..n) +-------------+ PlanVersion is version table tracking all version changes and it have ActiveFromData and ActiveToData columns show us when was this version active. Plan also can have SubPlans which can change in time so PlanVersion also have ParrentPlanId column which tell us what was current subplan for version. What i want is to

Unable to cast object of type NHibernate.Collection.Generic.PersistentGenericBag to List

淺唱寂寞╮ 提交于 2020-03-08 04:57:46
问题 I have a class called ReportRequest as: public class ReportRequest { Int32 templateId; List<Int32> entityIds; public virtual Int32? Id { get; set; } public virtual Int32 TemplateId { get { return templateId; } set { templateId = value; } } public virtual List<Int32> EntityIds { get { return entityIds; } set { entityIds = value; } } public ReportRequest(int templateId, List<Int32> entityIds) { this.TemplateId = templateId; this.EntityIds = entityIds; } } It is mapped using Fluent Hibernate as:

C#集集合?

荒凉一梦 提交于 2020-02-28 09:27:36
有人知道C#中是否有与Java的 Set 集合相当的东西? 我知道您可以通过填充但忽略值来在某种程度上使用 Dictionary 或 HashTable 模仿集合,但这不是一种非常优雅的方法。 #1楼 HashSet<T> 数据结构: .NET Framework 3.5中引入了框架类库的 HashSet<T> 数据结构。 可以在 MSDN参考页上的 HashSet<T> 找到其成员的完整列表。 HashSet<T> 或多或少地根据 数学集合 建模,这意味着: 它可能不包含重复值。 它的元素没有特定的顺序; 因此,该类型不实现 IList<T> 接口,而是实现更基本的 ICollection<T> 。 结果,哈希集内的元素不能通过索引随机访问。 它们只能通过枚举器进行迭代。 某些集合函数(例如 Union , Intersection , IsSubsetOf , IsSupersetOf 可用。 当使用多套时,这些可以派上用场。 HashSet<T> 和 List<T> 之间的另一个区别是,调用哈希集的 Add(item) 方法将返回一个布尔值:如果添加了该项目,则返回 true 否则,返回 false (因为它已在集合中找到)。 为什么不 List<T> ? 由于 HashSet<T> 只是唯一对象的集合,因此您可能想知道为什么它必须是数据结构。

为什么在创建索引时使用INCLUDE子句?

空扰寡人 提交于 2020-02-26 03:27:17
在学习70-433考试时,我注意到您可以通过以下两种方式之一创建覆盖指数。 CREATE INDEX idx1 ON MyTable (Col1, Col2, Col3) - 要么 - CREATE INDEX idx1 ON MyTable (Col1) INCLUDE (Col2, Col3) INCLUDE子句对我来说是新的。 在确定是否创建包含或不包含INCLUDE子句的覆盖索引时,您将为什么使用它以及您会建议什么准则? #1楼 如果该列不在 WHERE/JOIN/GROUP BY/ORDER BY ,而仅在 SELECT 子句中的列列表中。 INCLUDE 子句将数据添加到最低/叶子级别,而不是在索引树中。 这使索引变小,因为它不是树的一部分 INCLUDE columns 不是索引中的关键列,因此它们没有顺序。 这意味着如上所述,它对于谓词,排序等并不是真正有用。 但是,如果在关键列的几行中有剩余查找,这 可能 会很有用。 另一篇有关实例的MSDN文章 #2楼 基本索引列已排序,但包含的列未排序。 这样可以节省维护索引的资源,同时仍然可以在包含的列中提供数据来覆盖查询。 因此,如果要涵盖查询,则可以放置搜索条件以将行定位到索引的已排序列中,然后使用非搜索数据“包括”其他未排序的列。 它绝对有助于减少索引维护中的排序和碎片数量。 #3楼

EF、Dapper、NHibernate等ORM框架的比较及优缺点

荒凉一梦 提交于 2020-02-26 03:25:09
什么是ORM? ORM的全称是Object Relational Mapping,即对象关系映射。它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可以把对数据库的操作转化为对这些对象的操作。因此它的目的是为了方便开发人员以面向对象的思想来实现对数据库的操作。 ORM实现原理 对象到数据库的映射; 对象与数据库数据的互相转换; 重量级ORM, 以EntityFramework、NHibernate为代表 优点 面向对象方式访问数据库,摆脱SQL 可移植性强,支持所有流行的数据库 面向接口的设计,可扩充性强 对事务、缓存(一级缓存)有良好的封装及配置 缺点 比较复杂,学习曲线大; 处理对象关联很容易出错; 不适合统计查询系统; 对于多表连查,复杂的sql实现比较复杂,而且有可能需要借助其他方案; 自动生成的sql查询执行效率低; 对于大数据量、高负载场景需要慎重考虑; 实现良好的二级缓存很困难,并且只能定制; 轻量级ORM 以dapper为代表,并且是半自动的。也就是说实体类都要自己写,Dapper相当于Java里的Mybatis。 优点: 1、开源、轻量、小巧(单文件,代码就一个SqlMapper.cs文件,编译后就40K的一个很小的Dll.)、上手容易。支持poco及动态类型,缩写词:POCO's (plain old CLR objects)。

How to detect collection changes in NHibernate

两盒软妹~` 提交于 2020-02-25 05:50:23
问题 How can I detect changes (additions and removals) from many to many sets and lists in NHibernate? I'm using an interceptor to detect changes in the object model (for auditing and more), this works great for changes within object (using OnSave/OnFlushDirty) but not for collections. When a collection changes the OnCollectionUpdate method is called but it only receives the key of the object holding the collection and the collection's latest items. What I need is: the object holding the

How to detect collection changes in NHibernate

爱⌒轻易说出口 提交于 2020-02-25 05:47:50
问题 How can I detect changes (additions and removals) from many to many sets and lists in NHibernate? I'm using an interceptor to detect changes in the object model (for auditing and more), this works great for changes within object (using OnSave/OnFlushDirty) but not for collections. When a collection changes the OnCollectionUpdate method is called but it only receives the key of the object holding the collection and the collection's latest items. What I need is: the object holding the