Tag: nhibernate mapping

如何在C#中传递Nhibernate中的两个连接字符串?

我在我的应用程序中遇到问题:我有两个数据库,我想用NHibernate访问它们,但在配置文件中我只有一个数据库的连接字符串。 那么如何将多个连接字符串传递给NHibernate呢?

当两个类具有相同名称但名称空间不同时,NHibernate DuplicateMappingException

我的域模型root中有一个类,如下所示: namespace Domain { public class Foo { … } } 我还在另一个名称空间中有另一个具有相同名称的类: namespace Domain.SubDomain { public class Foo { … } } 对于我的映射,我有一个Mapping目录,其子目录名为SubDomain ,其中包含Domain.SubDomain命名空间中找到的域类的映射。 他们都在同一个集会中。 但是,当我尝试使用NHibernate加载它们时,我不断收到DuplicateMappingException …即使两个Foos都有不同的命名空间。 我用来加载我的NHibernate配置的代码是这样的: var cfg = new Configuration() .Configure() .AddAssembly(“Domain”); 我如何告诉NHibernate让我使用两个具有相同名称(但名称不同的名称空间)的实体?

在nhibernate mvc c中加入两个表#

我使用主键和外键加入两个表。 我的桌子是 项目 ,列是: ItemId int主键, 名称 varchar, 价格浮动, CategoryID int外键, QtyInStock int 类别 ,列是: Id int pk, 类别 varchar, 名称 varchar 我想根据ID = categoryId选择Category 我正在使用NHibernate 4.03与xml配置文件。

NHibernate映射与中间表的一对多关系

如何在没有中间class PostTag创建的情况下定义映射? 我有三张桌子 t_post(id…) t_tag(id, name) t_post_tag(id,post_id, tag_id) 我希望在Post类型中有一个带有Tags的集合: class Post { public virtual IEnumerable Tags{ get; set; } } public class Tag { } 映射: …

映射接口或抽象类组件

请考虑以下简单用例: public class Foo { public virtual int Id { get; protected set; } public virtual IBar Bar { get; set; } } public interface IBar { string Text { get; set; } } public class Bar : IBar { public virtual string Text { get; set; } } 和流畅的nhibernate地图类: public class FooMap : ClassMap […]

NHibernate – not-null属性引用null或transient值

我收到此exception(底部的完全例外): NHibernate.PropertyValueException was unhandled by user code Message=”not-null property references a null or transient valueClearwave.Models.Encounters.Insurance.Patient” Source=”NHibernate” EntityName=”Clearwave.Models.Encounters.Insurance” PropertyName=”Patient” 我已经做了很多谷歌搜索,似乎这个错误最常见的原因是当一个关联是双向的,但只设置了一半。 如:保险。患者=患者被叫,但是Patient.Insurances.Add(保险)不是。 事实上,我确实有这样的场景但我在调用Save之前检查了对象,并且Insurance.Patient和Patient.Insurances [0]都是正确的对象。 此exception似乎引用的另一种可能性是瞬态值。 在我的情况下, 每个对象都是暂时的,所以我怀疑问题的根源在这里。 但是,现在一切都需要暂时,因为还没有保存。 我希望NHibernate能够持久存在而不是抱怨它们不会被持久存在。 以下是我映射的一些片段(流利): public PatientMap() { WithTable(“tPatient”); Id(x => x.Id, “uid_Patient”).GeneratedBy.GuidComb ().Access.AsReadOnlyPropertyThroughCamelCaseField(); HasMany(x => x.Insurances).WithKeyColumn(“uid_Patient”) .Cascade.All() .Inverse(); … } public InsuranceMap() { WithTable(“tPatientInsuranceInfo”); Id(x => x.Id, “uid_PatientInsuranceInfo”).GeneratedBy.GuidComb ().Access.AsReadOnlyPropertyThroughCamelCaseField(); References(x => […]

多列多对一

我有一个遗留数据库和两个表之间的一对一关系。 关键是关系使用两列,而不是一列。 有没有办法在nhibernate中说,当获取一个被引用的实体时,它在join语句中使用了两列,而不是一个? 我有一个类似的表结构 TaskProgress ProgressId 任务id AssignmentId 用户身份 任务 任务id AssignmentId 任务名称 每个任务都可以在不同的任务中进行分配。 这意味着任务进度的唯一任务只能由AssignmentId和TaskId字段建立。 我想用这个: References(x => x.Template) .Columns() .PropertyRef() 但无法获得如何在多列上映射连接,任何想法?

NHibernate一对一映射

我是NHibernate的新手所以到目前为止我对映射等的接触有限,而且我刚刚遇到了一个需要帮助的场景。 我有2张桌子: 评论TaggedReviews 我有两个看起来像这样的类(为简洁起见我排除了非重要属性): 评论 public virtual int ReviewId { get; set; } public virtual TaggedReview TaggedReview { get; set; } public virtual string Title { get; set; } public virtual string Descrip { get; set; } TaggedReview public virtual int ReviewId { get; set; } public virtual Review Review { get; set; } public […]

流畅的NHibernate – 如何一对一地映射子类?

假设我有三个class级。 实例化A是有效的,但也有特殊情况B和D,它们是A的子类,添加了额外的信息。 我如何在(流畅的)NHibernate中为此创建映射文件? public class A { public int ID { get; set;} public string CommonProperty1 { get; set; } public string CommonProperty2 { get; set; } } public class B : A { public string BSpecificProperty1 { get; set; } //not null public string BSpecificProperty2 { get; set; } //not null } public class […]

流畅的NHibernate实体HasMany不同子类类型的集合

所以一切都与基本的鉴别器映射很好地协调。 我可以毫无问题地直接与实体A和B进行交互。 public class BaseType {} public class EntityA : BaseType {} public class EntityB : BaseType {} 这在BaseType映射中没有戏剧性地映射为 DiscriminateSubClassesOnColumn(“Type”) .SubClass(“A”, m => { }) .SubClass(“B”, m => { }); 问题发生在:聚合中我们想要将集合映射到每个子类 使用如下的映射 public class AggregateMap: BaseMap { public AggregateMap() { HasMany(x => x.ACollection).AsSet().Cascade.All(); HasMany(x => x.BCollection).AsSet().Cascade.All(); } } 这些显然不是完整的映射,但是最低限度的描述我正在尝试的东西。 添加到ACollection和BCollection的项目在保存Aggregate时通过级联正确保留。 但是,当检索到聚合时,对类型歧视存在混淆。 我已经经历了许多不同的可能解决方案,我不再知道哪些不起作用。 我觉得我不应该在集合中提供where子句,但事情对我来说不起作用。 任何线索将不胜感激。