标签: nhibernate-mapping

如何使用NHibernate创建多列索引或唯一约束

如何使用NHibernate Mapping或Fluent NHibernate创建多列索引和/或唯一约束.

nhibernate nhibernate-mapping fluent-nhibernate

15
推荐指数
2
解决办法
8260
查看次数

NHibernate中的歧视联盟

我想知道是否有任何相对简单的方法来扩展NHibernate以支持F#的歧视联盟.不仅仅是单个IUserType或ICompositeUserType,而是一些通用的东西,无论DU的实际内容如何,​​我都可以重复使用.

例如,假设我有一个名为RequestInfo的属性,它是一个定义为的联合:

type RequestInfo =  
    | Id of int
    | Name of string
Run Code Online (Sandbox Code Playgroud)

这将编译为一个抽象的RequestInfo类,具有具体的子类Id和Name.我可以通过F#反射得到所有这些信息.在这种情况下,我可以使用"RequestInfo_Tag","RequestInfo_Id","RequestInfo_Name"将其存储在数据库中.

因为我是NHibernate的新手,我会遇到什么样的问题试图遵循这种方法?更复杂的案件是不可能处理的?例如,嵌套的歧视联盟呢?有没有办法可以将其他联盟的读取"移交"到另一个ICompositeUserType?

更重要的是,这会搞砸我的查询功能吗?意思是,我是否必须知道DB中的实际列名; 我将无法执行Criteria.Eq(SomeDiscUnion)并将其全部整理出来?

我不是在寻找一个完整的"提供代码"的答案,只是一些一般的建议,如果这是值得追求的(以及如何),或者我应该重新考虑我的模型.

谢谢!

PS不要太粗鲁,但如果你的答案是"使用C#",那就不是很有帮助了.

nhibernate f# nhibernate-mapping

15
推荐指数
1
解决办法
1390
查看次数

使用NHibernate和EAV数据模型

我正在尝试利用NH来映射到数据模型,这是对EAV/CR数据模型的宽松解释.

我有大部分工作,但我正在努力映射Entity.Attributes集合.

以下是有问题的表格:

--------------------
| Entities         |
--------------------
| EntityId  PK     |-|
| EntityType       | |
-------------------- |
         -------------
         |
         V
--------------------
| EntityAttributes |    ------------------    ---------------------------
--------------------    | Attributes     |    | StringAttributes        |
| EntityId  PK,FK  |    ------------------    ---------------------------
| AttributeId  FK  | -> | AttributeId PK | -> | StringAttributeId PK,FK |
| AttributeValue   |    | AttributeType  |    | AttributeName           |
--------------------    ------------------    ---------------------------
Run Code Online (Sandbox Code Playgroud)

AttributeValue列实现为sql_variant列,我为它实现了NHibernate.UserTypes.IUserType.

我可以创建一个EntityAttribute实体并直接保存它,以便部分层次结构正常工作.

我只是不确定如何将EntityAttributes集合映射到Entity实体.

请注意,EntityAttributes表可以(并且确实)包含给定EntityId/AttributeId组合的多个行:

EntityId AttributeId AttributeValue
-------- ----------- --------------
1        1           Blue
1 …
Run Code Online (Sandbox Code Playgroud)

nhibernate nhibernate-mapping entity-attribute-value

15
推荐指数
1
解决办法
1496
查看次数

枚举解析似乎不适用于Fluent NHibernate

我有一个名为Salutation的Enum数据访问类:

 public enum Salutation
  {
    Unknown = 0,
    Dame = 1,
    etc
    Mr = 5,
    etc
  }
Run Code Online (Sandbox Code Playgroud)

我正在使用NHibernate进行课程,直到今天早上我才使用.hbm.xml文件进行映射.但是,我现在已经切换到使用Fluent NHibernate,但加载类的实例失败(例如):

[HibernateException:无法解析5作为称呼]

正如您所看到的,5应该可以解析为Salutation(假设5是一个int,它不可能从错误消息中得知).

谁知道这里发生了什么?

谢谢

大卫

nhibernate enums nhibernate-mapping fluent-nhibernate

15
推荐指数
1
解决办法
2734
查看次数

NHibernate Fluent与属性

我有兴趣将一些NHibernate配置/映射移动到代码中以帮助解决一些维护问题.任何人都可以提供Fluent NHibernate与NHibernate.Mapping.Attributes的任何建议/优缺点/比较吗?

我对Java Hibernate注释有一些经验,我很喜欢,但我很好奇NHibernate属性是否具有可比性,以及Fluent是否提供了应该考虑的任何重大上行/下行.

nhibernate attributes nhibernate-mapping fluent-nhibernate

14
推荐指数
1
解决办法
4720
查看次数

如何在sql server中创建一个varbinary(max)字段,以获得流畅的nhibernate

如何在源代码大小为varbinary(max)的sql server 2005表中创建一个varbinary字段,以获得流畅的nhibernate?目前我总是得到varbinary(8000)的默认值,这不够大,因为我将存储图像文件.

我尝试过使用CAstle.ActiveRecord但尚未取得任何成功.

 [ActiveRecord]
 public class MyFile : Entity
{
    public virtual string FileName { get; set; }
    public virtual string FileType { get; set; }
    public virtual int FileVersion { get; set; }
    public virtual int FileLength { get; set; }

    [Property(ColumnType = "BinaryBlob", SqlType = "VARBINARY(MAX)")]
    public virtual byte[] FileData { get; set; }   
}
Run Code Online (Sandbox Code Playgroud)

几个小时都未能找到解决方案,所以提前谢谢

捷克克朗

nhibernate nhibernate-mapping fluent-nhibernate varbinary

14
推荐指数
2
解决办法
1万
查看次数

13
推荐指数
1
解决办法
8556
查看次数

当cascade是delete-all-orphan时,如何更改NHibernate中孩子的父级?

我有两个双向一对多关系的实体:

public class Storage
{
    public IList<Box> Boxes { get; set; }
}

public class Box
{
    public Storage CurrentStorage { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

和映射:

<class name="Storage">
    <bag name="Boxes" cascade="all-delete-orphan" inverse="true">
        <key column="Storage_Id" />
        <one-to-many class="Box" />
    </bag>
</class>

<class name="Box">
    <many-to-one name="CurrentStorage" column="Storage_Id" />
</class>
Run Code Online (Sandbox Code Playgroud)

A Storage可以有很多Boxes,但Box只能属于一个Storage.我将它们映射,以便一对多有一个级联all-delete-orphan.

当我尝试更换Box时,我的问题就出现了Storage.假设我已经运行了这段代码:

var storage1 = new Storage();
var storage2 = new Storage();
storage1.Boxes.Add(new Box());

Session.Create(storage1);
Session.Create(storage2);
Run Code Online (Sandbox Code Playgroud)

以下代码将给我一个例外:

// get the first …
Run Code Online (Sandbox Code Playgroud)

nhibernate cascade nhibernate-mapping

13
推荐指数
1
解决办法
2704
查看次数

防止Nhibernate schemaexport生成外键约束有很多关系

我有这样的映射:

HasMany(x => x.Orders).KeyColumn("CustomerID");
Run Code Online (Sandbox Code Playgroud)

这导致schemaexport生成这样的约束:

alter table [CustomerOrder] 
    add constraint FK45B3FB85AF01218D 
    foreign key (CustomerID) 
    references [Customer]
Run Code Online (Sandbox Code Playgroud)

我尝试在References()映射上添加.NotFound.Ignore(),以禁止生成约束,但这不起作用.

是否可以定义一个映射来强制SchemaExport不生成约束?

nhibernate nhibernate-mapping fluent-nhibernate schemaexport

13
推荐指数
1
解决办法
2854
查看次数

Nhibernate Conformist Mapping"无法确定类型......"

班级:

    public class SOPProcess : ISOPProcess
{
    public virtual Guid Id { get; set; }
    public virtual SOP SOP { get; set; }
    public virtual ProcessType Type { get; set; }       

    public virtual SOPProcessInput Input { get; set; }
    public virtual SOPProcessOutput Output { get; set; }
    public virtual SOPProcessMeasures Measures { get; set; }

    public virtual decimal YieldFactor { get; set; }

    public virtual SOPProcess PreviousProcess { get; set; }
    public virtual SOPProcess NextProcess { get; set; }
} …
Run Code Online (Sandbox Code Playgroud)

nhibernate nhibernate-mapping

13
推荐指数
1
解决办法
4752
查看次数