Tag: fluent nhibernate

流畅的NHibernate复合ID表问题

我是nhibernate的新手,我遇到了一个问题。 我有以下表格: 表1: 表名:用户, 第1列: ID, 第2列:名称 表2: 表名:任务, 第1列: ID, 第2列:描述 表3: 表名: UserToDoMissions, 第1列: UserID, 第2 列 : MissionID, 第3列:排名 这是代码:MissionMap: public class MissionMap : ClassMap { public const string TableName = “tblMissions”; public const string c_id = “achID”; public const string c_name = “achName”; public MissionMap() { Table(TableName); Id(x => x.ID).Column(c_id).Not.Nullable(); Map(x […]

限制集合仅检索只读实体的最近条目

用户实体可以拥有数千个UserOperations。 有时我不想检索(对于只读实体)所有这些,但仅“最近10次或未完成”。 public class SimpleForm { public class User : EntityBase { // … private ISet _recentOperations = new HashedSet(); public virtual ISet RecentOperations { get { return _recentOperations; } set { _recentOperations = value; } } } } 那我怎么指定它呢? 我想我可以使用映射覆盖? 我知道我可以通过单独的查询来实现这一点但是可以通过实体映射完成吗? 另外我想知道是否有可能为非readonly实体做一些我可以修改操作的集合? UPDATE 我试着用 DateTime dateTime = (DateTime.UtcNow – TimeSpan.FromDays(15)); mapping.HasMany(x => x.RecentOperations) .Where(x […]

使用流畅的nhibernate映射实体oneToMany

问题似乎很简单但是我在尝试映射这些实体时遇到了很多麻烦。 我只是看不出我做错了什么。 你们能帮助我吗? 我有课堂Cliente : public class Cliente { public Cliente () { } public virtual int ClienteId { get; set; } public IList ListaMedidores { get; set; } public virtual string NumeroMedidor { get; set; } } 并且上课Medidor public class Medidor { public Medidor() { } public virtual string NumeroMedidor { get; set; } […]

为什么Nhibernate在我的MVC应用程序中跨多个请求共享会话?

我们有一个MVC项目,通过StructureMap构建NHibernate依赖项 var sessionFactory = ConnectionRegistry.CreateSessionFactory(); For().Singleton().Use(sessionFactory); For().Singleton().Use(); ConnectionRegistry.CreateSessionFactory看起来像这样 public static ISessionFactory CreateSessionFactory() where T : ICurrentSessionContext { if (_sessionFactory == null) { lock (_SyncLock) { if (_sessionFactory == null) { var cfg = Fluently.Configure() .Database(MsSqlConfiguration.MsSql2005.ConnectionString(DataFactory.ConnectionString)) .CurrentSessionContext() .Mappings(m => m.FluentMappings.AddFromAssemblyOf()) .ExposeConfiguration(c => c.SetProperty(“generate_statistics”, “true”)) .ExposeConfiguration(c => c.SetProperty(“sql_exception_converter”, typeof(SqlServerExceptionConverter).AssemblyQualifiedName)); try { _sessionFactory = cfg.BuildSessionFactory(); } catch (Exception […]

如何映射ICompositeUserType

我正在将一个简单的工作演示从nhibernate移植到流畅。 我现有的nhibernate映射是这样的: 我试图创建equlivilant ClassMap : internal class InvoiceMap : ClassMap { public InvoiceMap() { Id(x => x.Id); Map(x => x.Customer); Map(x => x.Number); Map(x => x.TotalValue) .CustomType(typeof (MoneyCompositeUserType)) .Column(“TotalValue_Amount”) .Column(“TotalValue_Currency”); } } 但我得到错误: —> NHibernate.MappingException:属性映射列数错误:MoneyHibernate.Invoice.TotalValue类型:MoneyHibernate.MoneyCompositeUserType 所以我认为两次声明列不是正确的方法吗?

流畅的NHibernate:如何将整个类映射为ReadOnly?

我有几个类从非常精细的表中读取,这就是为什么我希望它们被NHibernate用作“ReadOnly”。 在每个字段映射上建立.ReadOnly()非常草率,我不确定我是否相信它。 我如何设置一个完全只读的类,因为我可以轻松地使用传统的XML映射? 编辑 :答案确实有效。 我希望它在我尝试保存ReadOnly()对象时抛出exception,但它只是默默地这样做。 谢谢。

使用中间表进行一对多映射

我认为通过将中间表映射为HasMany以及作为HasOne的中间人和子映射之间的方法,我将这个挂起,但HasOne希望共享密钥。 (无反向选项。:[] 无论如何,我有关系结构: 地址(儿童) AddressId ..地址字段 AddressCustomer(中介) AddressCustomerId AddressId 顾客ID 客户(父母) 顾客ID ..Customer Fields 为什么我有这个中间表而不是正常的1-many? 因为将有其他实体需要包含地址。 (即网站等)他们将拥有自己的中间表,以便他们可以共享地址表。 到目前为止我的映射: public class CustomerAddressMap : ClassMap { public CustomerAddressMap() { Schema(“dbo”); Table(“CustomerAddress”); Id(x => x.CustomerAddressId); Map(x => x.FromDate) .Not.Nullable(); Map(x => x.ToDate); HasOne(x => x.Address) .ForeignKey(“AddressId”) .Cascade.All(); } } public class AddressMap : ClassMap { public AddressMap() { […]

FluentNHibernate:使用NotFound.Ignore()映射引用时的性能惩罚

我使用FluentNhibernate,当看到关联的引用与NotFound.Ignore()映射时,我看到NHibernate执行了许多查询。 由于遗留数据库的引用完整性有点糟糕,我想知道是否有解决方法或者是否有可以使用的替代映射。 例: //no query when loading the entity References(x => x.User, “UserId”).LazyLoad().Nullable(); //performs a hundred queries when I load my entities References(x => x.User, “UserId”).LazyLoad().Nullable().NotFound.Ignore();

什么是Fluent NHibernate中的schemaExport?

我很想知道更多关于这段代码以及执行时的预期。 /// /// Sets up NHibernate, and adds an ISessionFactory to the given /// container. /// private void ConfigureNHibernate(IKernel container) { // Build the NHibernate ISessionFactory object var sessionFactory = FluentNHibernate .Cfg.Fluently.Configure() .Database( MsSqlConfiguration.MsSql2008.ConnectionString( c => c.FromConnectionStringWithKey(“ServicesDb”))) .CurrentSessionContext(“web”) .Mappings(m => m.FluentMappings.AddFromAssemblyOf()) //.ExposeConfiguration(cfg => new SchemaUpdate(cfg).Execute(true, true)) .ExposeConfiguration(cfg => { var schemaExport = new SchemaExport(cfg); schemaExport.Drop(true, […]

NHibernate:保存瞬态实例时,身份ID如何更新?

如果我使用session-per-transaction并调用: session.SaveOrUpdate(实体) 更正: session.SaveOrUpdateCopy(实体) ..and entity是identity-Id = 0的瞬态实例。 以上行是否会自动更新实体的Id,并使实例持久化? 或者它应该在transaction.Commit上这样做吗? 或者我必须以某种方式明确地编码? 显然,数据库行的Id(新的,因为瞬态)是自动生成的并保存为某个数字,但我在这里谈论的是实际的参数实例。 哪个是业务逻辑实例。 编辑 – 跟进,相关问题。 映射: public class StoreMap : ClassMap { public StoreMap() { Id(x => x.Id).GeneratedBy.Identity(); Map(x => x.Name); HasMany(x => x.Staff) // 1:m .Cascade.All(); HasManyToMany(x => x.Products) // m:m .Cascade.All() .Table(“StoreProduct”); } } public class EmployeeMap : ClassMap { public EmployeeMap() […]