我有一个遗留数据库,我正在与Nhibernate映射。
在多个位置,一个och字符串或域对象列表被映射为数据库中的分隔字符串。值类型案例中的'string | string | string'与引用类型案例中的'domainID | domainID | domainID'类似
我知道我可以在类上创建一个伪属性并映射到该字段,但我希望以更干净的方式进行,比如将枚举映射为类的字符串表示形式
IUserType是到这里来的方式吗
提前谢谢
/约翰我在用这个:
public class Delimit
我最近将客户端access v5.4升级到了最新的v5.9。然而,现在,当我从NHibernate的session对象调用flush()时,输出显示了正确的更新查询,但它却在我身上爆炸了。在调用flush之后——即使我在Visual Studio中——操作系统会询问我要使用哪个调试器。我选择了2008,但它告诉我2008调试器已经连接
最后,我取消了,但VisualStudio结束了调试模式,所以它不会返回消息。我甚至有一个try/except环绕的flush调用,调试器从不显示我的消息
整个问
是否有一种方法可以映射数据库中可能存在或不存在的列,或者将其动态映射到列 您可以动态更改映射,但我认为没有办法映射可能存在或不存在的列。下面的示例是如果您使用的是fluent nhibernate,您可能会如何操作
var fluentConfiguration = Fluently.Configure(NHibernate.Cfg.Configuration().Configure())
.Mappings(m =>
m.FluentMappings
我有一个用户对象,上面有一个国家对象。我使用用户映射文件中的多对一标记来映射它:
<many-to-one name="Country" column="CountryID" cascade="none"/>
我得到一个错误,说“国家实例的标识符从7改为8”。这大概是因为国家对象被NHibernate标记为肮脏?但我不想更新country对象,只想更新用户中的ID引用。有可能这样做吗
谢谢,
Jonvar user=session.Get(userID);
user.Country
考虑以下Hibernate映射文件:
<hibernate-mapping ...>
<class name="ContentPackage" table="contentPackages">
<id name="Id" column="id" type="int"><generator class="native" /></id>
...
<bag name="Clips" table="contentA
当我试图保存一个包含其他实体集合的实体时,我遇到了NHibernate的问题
例如,订单和订单行。订单行与带有行李的订单相关联。它的级联设置为删除孤立项,当我为订单调用SaveOrUpdate时,我为其订单行调用SaveOrUpdate
该异常发生在订单的SaveOrUpdate中,但仅当我的订单行集合不为null时才会发生
在将cascade设置为delete orphan之前,我已经将所有的delete orphan都设置为delete orphan,我想我可以利用订单行的SaveOrUpd
我正在使用NHibernate为一个非常基本的ASP.NET MVC应用程序建模,我似乎被我的设计卡住了。这是我的模型的草图:
正如你所看到的,这是非常基本的,但我有一些担心。用户根实体和组织根实体通过两个一对多关系访问同一个组织\用户实体子级。这似乎是不对的,我想我打破了总的界限。这个模型对我来说很有味道,但我喜欢这个想法,因为我希望有这样的代码:
var user = userRepository.Load(1);
var list = user.Organizations; // Al
我有一个具有相关权限的用户。以下是我想要的:
我创建一个用户并向User.Permissions集合添加权限。它得到保存,一切都按预期进行
然后我编辑用户并删除权限。然后创建一个新的用户对象,并且权限集合为空。将此新用户对象的标识符和版本设置为相关值,并更新用户对象
但不会删除现有权限
因此,我希望NHibernate始终删除权限集合并重新插入其中的所有项
我该如何设置?我正在使用fluentapi
问候,,
Eben我认为编辑时不应该创建新对象-这就是为什么nhibernate不删除权限集合的
因此,我目前正在尝试在我的应用程序中将对象从一个数据库升级到另一个数据库。基本上,我希望允许用户单击一个按钮,并将更改从登台升级到生产
要做到这一点,我真的希望保持ID不变,以帮助调试。因此,例如,如果对象在staging db中的ID为6,我希望它在生产中具有相同的ID。为此,我们在生产数据库上关闭了identity,只使用非空整数生成主键列
在我的登台映射文件中,我的ID使用标识生成器进行映射,但对于生产,我希望分配它们。有没有可能通过编程来改变这一点,或者使用拦截器或类似的东西
提前谢谢
对于最初的Java Hibernate是否有类似Fluent NHibernate的东西?若否,原因为何?是否存在特定于语言的限制?如果我没有弄错的话,我相信Fluent NHibernate依赖于C#3.0中Linq提供的优秀功能。在Java实现lambda表达式等之前,我认为我们不会看到流畅的Hibernate
不过,我可能错了。:) Groovy支持lambda表达式(尽管它们很容易混淆地称之为闭包),并且Groovy类可以直接从Java访问。也许Java应用程序的映射可以用Groovy编
在成功地使一个示例程序运行之后,我现在开始
使用Fluent NHibernate进行实际工作-尝试在我的项目类中使用自动映射
继承权
这是一个科学仪器应用程序,我正在学习的课程
映射有几个属性是浮点数组,例如
private float[] _rawY;
public virtual float[] RawY
{
get
{
return _rawY;
}
set
在web应用程序中,会话仅在当前线程中可用
有没有人知道在新的异步线程中通过NHibernate执行查询的技巧
例如,我如何才能使这样的工作:
public void Page_Load()
{
ThreadPool.QueueUserWorkItem(state => FooBarRepository.Save(new FooBar()));
}
会话不是线程安全的。如果您在一个线程上创建会话并从另一个线程使用它,那么您迟早会遇到问题。在后台线程上创建一个新会话,并在后台线程完
好的,这将是一个很长的机会,因为这是一个大的系统,我还没有完全理解,而且问题可能不在NHibernate本身,我甚至在复制它时遇到困难,但是
我有一个带有节的类,当我通过ASP.NETMVC应用程序对它运行查询时,它会失败,但只是有时会失败。是的,最糟糕的一种
我看到的例外是:
NHibernate.QueryException: could not resolve property:
Attributes.MyAttributeName of: MyClassName
at NHiber
我使用Fluent nHibernate POCO类+映射定义数据模型。我还使用nHiberate模式创建数据库模式。
一切正常,但有一个令人不快的事实。
当我使用多对一引用时,referece由与GUID类似的名称命名,而不是任何描述性名称。
下面是一段SQL:
alter table [Odbiorca]
add constraint FK291D244B5D9E8115
foreign key (Adr_IdKraj)
referenc
我的模型是这样的:
Flavor
public IList<Mention> Mentions
Mention
public IList<Flavor> Flavors
有人知道怎么做吗?试试这个:
var flavors = Session.CreateQuery(@"select f.Id, f.PropertyName, count(elements(f.Mentions))
fro
我有一个映射文件
<set name="Friends" table="Friends">
<key column="UserId"/>
<many-to-many class="User" column="FriendId"/>
</set>
我想为创建的友元表指定额外的列
例如批准(用户必须批准好友请求)
有简单的方法吗
更新
<?xml version="1.0" encoding="utf-8"?>
<
我试图找出是否有一种方法可以严格地通过子查询使用Criteria和DetachedCriteria或其他更优化的方法来执行以下操作。NameGuidTo只是一个具有字符串和Guid属性的轻量级对象
public IList<NameGuidDto> GetByManager(Employee manager)
{
// First, grab all of the Customers where the employee is a backup manager.
//
我开始用nhibernate和asp mvc2开发一个web应用程序(应用程序组合)
我很难正确更改应用程序的类别。
以下是我的模型:
public class Application
{
public virtual int Application_ID{ get; private set; }
public virtual string Name { get; set; }
public virtual Category Category { get; set
我们有一个非常深的对象图,我们需要一种方法来删除对象图的根,它需要快速发生。我们讨论的是大约10-15个表中的1000行。我们还将所有集合映射为AllDeleteOrphan。我们跳到NH将通过外键执行delete,但它实际上会对集合中的每个项执行delete。您如何处理这种情况?我相信您对delete=“cascade”属性感兴趣;请参见示例映射:
<set name="Children" table="Child" cascade="save-update" lazy="tru
我有一个具有CompositeId的实体,它不会使用SaveOrUpdateCopy向数据库插入新行。NHibernate生成的INSERT语句填充了?对于每个字段的值。它使用SaveOrUpdate插入fine,使用SaveOrUpdateCopy或SaveOrUpdate更新fine,没有CompositeId的任何实体使用SaveOrUpdateCopy插入/更新fine。我不想创建一个if/then来查找具有CompositeId的实体,以决定是否应该使用SaveOrUpdate或Sav
我在多对多关系中有两个实体
public class SecurityGroupMappingOverride : IAutoMappingOverride<SecurityGroup>
{
public void Override(AutoMapping<SecurityGroup> mapping)
{
mapping.HasManyToMany(x => x.Actions).ParentKeyColumn("security
我面临着其他人已经发布的相同问题:从数据库读取对象时,NHibernate将更新所有对象,因为一个字段的值在数据库中不正确
详细说明:新添加的日期列在所有行中都包含1/1/0001,因此在映射时,NHibernate将替换日期,并在发送时更新每一行
[编辑:事实证明这是错误的。相反,这些日期字段为空,但将由NHibernate更新为1/1/0001。有关详细信息,请参阅Diego的答案。]
为了防止这种情况的发生,我找到了一个和
评论家克里斯蒂安说:
您还可以通过禁用Hibernate中sess
我正在尝试将一个新的域模型映射到一个固定的模式遗留数据库,并且一直在研究如何进行某种类型的映射。这是我的问题所在
工人有很多种。例如一个小时工和一个工薪工
HourlyWorker的数据存储在WORKERS表和HOURLY_WORKERS表中,这两个WORKERS之间具有标准外键关系。PK_WORKERS=HOURLY_WORKERS.FK_WORKERS
从NHibernate的角度来看,HourlyWorker的“Id”被映射到WORKERS.PK_-WORKERS,这是应该的
到目前为止还
在表顺序和表行之间有一个简单的一对多关系
我想要一个报告每个订单实体和Line.Value字段总和的查询
我可以在HQL中执行此操作:
select order, sum(line.Value) as LineValue
from Order as order
join order.Lines as line
group by order
到目前为止,一切顺利。当我运行这个程序时,我会得到一个对象数组列表,其中[0]是顺序,[1]是行值之和
如何使用criteria API执行相同
我有两张桌子;t_用户(用户id主键、用户名、密码)和t_交易(交易id主键、用户id fk、项目名称、金额)。
如我们所见,t_users是父表,而t_transactions是子表,因此我为它们创建了两个类:
public class User
{
public int ID {get; set;}
public string Name {get; set;}
public string Password {get; se
在事务范围内使用Nhibernate和ADO.Net操作时,我遇到以下异常。NHibernate2.1还可以,但现在升级到3.0,会引发错误
using (var scope = new TransactionScope(TransactionScopeOption.Required))
{
GetmemberId(); --> NHibernate Call
Update(); ADO Call OracleDB
}
由于这起到环境事务的作用,Nhibe
我试图映射一个类型,其中一个属性是XmlDocument,但出现以下错误:
NHibernate.MappingException:来自表ChangeLog\u TestAuditHistory的关联引用了一个未映射的类:System.Xml.XmlDocument
我正在使用流利的NHibernate自动打印。NHibernate版本3.0.0.4000和Fluent NHibernate版本1.2.0.694。我知道NHibernate应该支持xml列,但我从未见过任何使用自动映射的示例。这
我有以下域映射:
Person
------
int PersonId
IList<PersonDetails> Details;
PersonDetails
-------------
Person Owner (mapped by using the FK field, PersonId)
string Name
string Address
DateTime UpdateDate
如何使用QueryOver重新创建以下SQL查询
SELECT *
FROM Person
我正在尝试使用领域驱动设计,同时创建一个可公开访问的网站。我遇到的一个问题是试图找出我的模型的聚合根应该是什么。我很清楚什么对象是实体对象,什么对象是值对象
与大多数公共站点一样,我的站点不允许每个用户都看到存储在站点中的每一条信息。相反,他们只能看到自己拥有的信息。在我的网站的情况下,用户将创建“项目”,他们也可以与其他用户共享。然而,用户仍然只能看到他们创建或被邀请加入的项目中的信息。我的模型中的所有其他对象都存在于项目中,如果要删除项目,则还应删除它包含的所有对象
那么这是否意味着我应该有
我正在使用Fluent从程序集添加映射。这需要将近5秒的时间。然后,获取会话工厂还需要1.5分钟。是否需要从这个家伙那里获得一次编译后的输出,并将其序列化到磁盘:
Fluently.Configure(config)
.Mappings(cfg =>
{
cfg.FluentMappings.AddFromAssemblyOf<Entity>()
我有以下数据结构:
+---------+
|Resume |
+---------+
|Id (PK) |
|IsActive |
|... |
|.. |
|. |
+---------+
+--------------------+
|Resume_Translation |
+--------------------+
|ResumeId (PK, FK) |
|Language (PK) |
|Title
我的IWantCustomInitialization实现程序上的Init()方法是
public void Init()
{
NServiceBus.Configure.With()
.Log4Net()
.DefaultBuilder()
.MsmqTransport()
.IsTransactional(false)
.Sagas()
.NHibernateSagaPersisterWi
在PretractionCommint事件中是否可以使用Nhibernate验证框架验证域模型?如果可能,我们如何编写此事件?下面的摘录摘自
基于NHibernate事件的验证
NHibernate验证器有两个内置的NHibernate事件侦听器。
无论何时发生PreInsertEvent或PreUpdateEvent,侦听器都将
验证实体实例的所有约束并引发异常
如果违反了其中任何一项。基本上,在开始之前会检查对象
NHibernate触发的任何插入和更新之前。这
包括级联更改!这是最方便和最
我在集成我们公司建立的一个在后端使用Solrnet的库时遇到问题。我们还有许多其他库,其中一个库使用NHibernate作为数据库。一切正常,图书馆会把数据拿回来
当我们添加一个对这个使用Solrnet的新库的引用时,事情开始变得糟糕起来。运行应用程序时发生的第一个错误。当应用程序使用NHibernate运行库的StructureMap注册表时,注册表会崩溃,因为NHibernate无法加载Castle.Core程序集,在添加引用之前,该程序集没有导致任何问题丢失。如果我们确保城堡。核心存在,N
我知道这解释了设置lazy=extra的作用
我的问题是,使用lazy=extra是否有任何相关成本?为什么我们不将lazy=extra设置为每个实例,否则我们会将其设置为true?这似乎与true相同,但更好?我能想到的唯一一件事是,如果一个集合主要用作数据源或在循环中进行迭代,那么最好在您第一次访问任何属性(甚至计数)时获得完整的集合
否则,您可能会执行比需要更多的查询
比如说
bool found = false;
int pos = 0;
while (!found &&
标签: Nhibernate
many-to-manynhibernate-mappingmapping-by-code
我对NHibernate很陌生
我有多对多映射。它们看起来像这样:
public abstract class EntityMapping<T> : ClassMapping<T> where T : Entity
{
public EntityMapping()
{
Id(x => x.Id, map => map.Generator(new IdentityGeneratorDef()));
}
}
pub
我最近做了一些被一些人认为是可怕的事情,但我个人喜欢这种实验。以下是电报式的描述:
使用NH获取数据对象
每个数据对象都由CastleDynamicProxy包装
查询用自定义属性修饰的属性时,重定向到自己的代码而不是NHibernate以获取Returnvalue。
对象创建/数据获取代码
Objects=GetAll().Select(x=>ProxyFactory.CreateProxy<T>(x)).ToList();
public IList<Person&g
我正在尝试创建应用程序范围的设置表:
Settings
Name | Value
--------------------------
Config1 | "A text string"
Config2 | "true"
Config3 | "100"
名称和值都是varchar类型。我正在尝试以某种方式将其映射到设置类中的Dictionary对象:
public class ApplicationSettings
{
protected virtual void I
我有一个班,是一个双亲的孩子。
当我删除其中一个父项时,我希望子项被删除,但另一个父项将它们保留在会话中,并出现错误已删除的对象将通过级联重新保存
class Company
{
// automap.HasMany(x=>x.Cars).Cascade.AllDeleteOrphan();
IList<Car> Cars { get; set; }
// automap.HasMany(x=>x.Employees).Cascade.AllDe
我有一个场景需要定义两个多列唯一约束,如下所示:
public class UserMap : IAutoMappingOverride<User>
{
public void Override(AutoMapping<User> mapping)
{
mapping.Map(x => x.UserName)
.UniqueKey("UQ_User_UserName_Client");
m
我有一个班有两个书包。
一个包是一个类的集合,它可以工作,另一个包是一个长值的集合,这个包不会持久化。
我已经在所有的网站上搜索过了,我的映射看起来还不错
在我的映射中,我有:
<class name="Event" table="Events">
<id name="Id" type="Int32">
<generator class="native" />
</id>
<property nam
我有一个sql server 2008数据库,其中的列类型为Date。我在nhibernate中遇到性能问题,因为nhibernate将sql写为DateTime类型和sql字符串,如'2012-05-01 00:00:00',这会导致错误的查询计划
如果类型正确,如日期和sql字符串“2012-05-01”,即..ToSortDateString,则此选项有效
因此,即使我告诉nhibernate我想要nhibernate.Type.DateType,sql输出也不正确,它将使用DateTim
在我的ASP.NET MVC 3项目中,我使用了Nhibernate,因为我引用了两个DLL--
1.LinFu.DynamicProxy.dll
2.NHibernate.ByteCode.LinFu.dll
我不知道这两个DLL的用途,即使我删除了这两个DLL的引用,项目构建也会成功。
那么这些DLL有什么用呢
另外,在hibernate配置中,我有如下条目--
NHibernate.ByteCode.LinFu.ProxyFactoryFactory,NHibernate.ByteCod
我的班级:
NHibernate映射:
问题:
上述代码将父级以及所有子级保存在相应的表中。但是,所有子项在字段ITEM_NO中的默认值为零。是否有任何映射可以帮助我自动为ITEM_NO分配一个递增值,从给定父项的每个子项1开始?i、 e项目_NO的顺序应从1到每个父项的子项数重复
注意:我需要Child是一个独立的实体,因此我应该能够查询它,而无需通过父元素。我认为问题在于list元素中的insert=“true”,因为这告诉NHibernate设置外键是孩子的责任。而且孩子不知道列表映射。如
我有一个Foo类,它可以有一个父Foo、许多子Foo和许多Snafu。NHibernate正在Foo和Snafu表中生成Foo_id和ParentFoo_id。重复字段不仅浪费内存,而且在其中一个重复引用最终为NULL时也会导致问题。这是使用SQL Server 2012
为什么会发生这种情况?我如何才能让它生成一个Foo_id
Foo类和映射:
public class Foo {
public int Id { get; set; }
public Foo ParentFoo { g
鉴于以下实体:
public class Comment
{
public int Id { get; set; }
public IList<Comment> ChildComments { get; set; }
}
公共类注释
{
公共int Id{get;set;}
公共IList ChildComments{get;set;}
}
我基本上想加载完整的树,即评论及其子元素加上他们的子元素,等等,对给定的Id使用QueryOver。不幸的是,我真的不知道从
嘿,伙计们,我正在尝试映射代码中类型为字符串的属性名。当我创建映射类并尝试为其分配类型时,我使用以下语法:
属性(x=>x.Name,m=>
{
...
m、 类型(新StringType());
...
});
它给了我一个错误,说构造函数调用无效。但是这种语法对我使用的所有其他类型(Int32、Boolean和DateTime)都有效
我还尝试键入m.Type();但我运行的测试中出现了一个错误。请尝试以下操作:
using NHibernate;
Property(x => x.N
我有一个asp.net网站正在利用log4net。由于有几个第三方库(如NHibernate),多个线程中有几个appender。IIS已设置,因此应该只有一个进程。我已经通过使用文件名中的进程id确认了这一点
Web.config摘录:
<appender name="AppAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" val
我试图在QueryOver中实现一个业务公式
POorder.Estimate是一个计算字段,我需要
ToDateOrderAmount = POrder.Estimate - Sum(PODist.Field1) - Sum(PODisTaxRebate.Field1 + PODisTaxRebate.Field2)
所以我需要写一个查询。我现在得到的是:
var reportModels =
Session.QueryOver<Domain.Model.Pur
我正在编写一个应用程序,它通过代码使用NHibernate映射。当我将TimeSpan映射为实体的属性时,TimeSpan被正确映射
但是,如果我将时间跨度放在组件映射(值对象)中,我会得到一个en异常“操作数类型冲突:bigint与时间不兼容”-即使我正在确保使用时间跨度映射映射时间跨度
以下代码将正确保存时间跨度(例如“1753-01-01T08:00:00”)
公共类MyEntity
{
公共虚拟整数Id{get;protected set;}
公共虚拟ISet其他实体{get;prote
上一页 1 2 3 4 5 6 ...
下一页 最后一页 共 183 页