标签: nhibernate-mapping

Cascade.SaveOrUpdate(SQLite)fluent-nhibernate

我在两个班级之间有多对多的关系:比赛和球员

我在映射中设置了Cascade.SaveUpdate,但是在保存锦标赛实例时,玩家将不会保存到玩家表中.Nhibernate只在链接表中写入父键和子键列.DB是SQLite.

这些是映射

 public TournamentMap()
    {
        WithTable("Tournaments");
        Id(x => x.Name);
        Map(x => x.Start).Access.AsLowerCaseField();
        Map(x => x.End).Access.AsLowerCaseField();

        HasManyToMany<Player>(x => x.Players)
            .WithTableName("TournamentsPlayers")
            .WithParentKeyColumn("tournamentName")
            .WithChildKeyColumn("playerName").AsSet()
            .Access.AsLowerCaseField()
            .Cascade.SaveUpdate().LazyLoad();

        References(x => x.Type).Access.AsLowerCaseField()
            .TheColumnNameIs("typeName")
            .Cascade.SaveUpdate();
    }

  public class PlayerMap : ClassMap<Player>
{
    public PlayerMap()
    {
        WithTable("Players");
        Id(x => x.Name);

        HasManyToMany<Player>(x => x.Tournaments)
            .Access.AsLowerCaseField()
            .WithTableName("TournamentsPlayers")
            .WithParentKeyColumn("playerName")
            .WithChildKeyColumn("tournamentName").AsSet()
            .Cascade.SaveUpdate().IsInverse().LazyLoad();
    }
}
Run Code Online (Sandbox Code Playgroud)

c# nhibernate nhibernate-mapping fluent-nhibernate

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

如何使用每个类的层次结构策略管理nhibernate中的多级类层次结构?

我试图在NHibernate中使用"每个类层次结构表"策略在一个表中实现我的对象层次结构.我的NHibernate映射出错,可以通过一个简单的例子轻松复制.错误是:

System.NotSupportedException: Attempting to parse a null value into an sql string (column:activity0_.Type).
at NHibernate.SqlCommand.InFragment.ToFragmentString() in InFragment.cs: line 109
at NHibernate.Persister.Entity.SingleTableEntityPersister.DiscriminatorFilterFragment(String alias) in SingleTableEntityPersister.cs: line 551
Run Code Online (Sandbox Code Playgroud)

我可以使用以下域类重现这一点:

public interface IActivity
{
    Guid Id { get; set; }
}

public abstract class Activity : IActivity
{
    public DateTime StartTime { get; set; }
    public Guid Id { get; set; }
}

public class Running : Activity
{
    public string Where { get; set; }
}

public class Talking : Activity
{ …
Run Code Online (Sandbox Code Playgroud)

c# nhibernate nhibernate-mapping

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

NHibernate MappingException.没有毅力

我正在努力让NHibernate工作.我有这门课:

mm.k.Domain.Kampagne
Run Code Online (Sandbox Code Playgroud)

(命名空间/程序集是mm.k.Domain)

在另一个Visual Studio项目(Assembly mm.k.Infrastructure)中,我获得了我的映射文件(在Mappings目录中),我的hibernate.cfg.xml和一些存储库.

继承我的映射文件:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="mm.k.Domain"
                   namespace="mm.k.Domain">

  <class name="Kampagne" table="Kampagner">
    <id name="Id">
      <generator class="identity" />
    </id>
    <property name="Navn" not-null="true" />
    <property name="Logo" />
  </class>

</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)

当我配置会话时,我这样做:

_configuration.AddAssembly(typeof(mm.k.Domain.Kampagne).Assembly);
Run Code Online (Sandbox Code Playgroud)

那就是什么都行不通!致电时:

var test = session.Get<Kampagne>(kampagneId);
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:"没有持久性:mm.k.Domain.Kampagne"就像它没有注册嵌入式映射fild.请注意,我对映射文件的构建操作设置为Embedded Resource.

如果我将以上行更改为:

_configuration.AddFile(@"fullpath\mm.k.Infrastructure\Mappings\Kampagne.hbm.xml");
Run Code Online (Sandbox Code Playgroud)

一切都很好!

有任何想法吗?提前致谢.

nhibernate nhibernate-mapping

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

NHibernate.MappingException:No persister在程序集中找不到映射文档

很多天以来,我一直在做nhibernate.但今天我陷入了一个令人沮丧的问题,即映射异常.

    <?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="IPC.Base.Domains" assembly="IPC">
  <class name="MenuItem" table="dbo.COR_MenuItem" default-access="property" default-cascade="save-update" default-lazy="true">
    <cache usage="read-only" region="completelyStatic"/>
    <id name="Id" type="System.Int32">
      <generator class="identity" />
    </id>
    <property name="Name" type="System.String" />
    <property name="Order" column="DisplayOrder" />
    <property name="Key" column="KeyChain" />
    <property name="Route" />
    <property name="ActionMethod" />
    <property name="IsHotlink" />
    <many-to-one name="ParentMenuItem" column="ParentMenuItemId" class="MenuItem" cascade="none"/>
    <bag name="MenuItems" table="dbo.COR_MenuItem" cascade="none">
      <cache usage="read-only" region="completelyStatic"/>
      <key column="ParentMenuItemId" />
      <one-to-many class="MenuItem" />
    </bag>
  </class>
</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)

我确实有一个映射类如下:

using System;
using System.Collections.Generic;

namespace IPC.Base.Domain
{
    public partial class MenuItem : …
Run Code Online (Sandbox Code Playgroud)

nhibernate nhibernate-mapping

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

NHibernate审计 - PostInsert不工作

我的应用程序具有以下实体:

public class User
{
    public virtual int UserID { get; set; }
    public virtual string UserName { get; set; }
    public virtual IList<UserLog> Log { get; private set; }

    public User()
    {
        Log = new List<UserLog>();
    }
}

public class UserLog
{
    public virtual int UserLogID { get; set; }
    public virtual User User { get; set; }
    public virtual string UserName { get; set; }
    public virtual DateTime DateCreated { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

使用以下流畅的映射:

public class UserMap …
Run Code Online (Sandbox Code Playgroud)

nhibernate nhibernate-mapping fluent-nhibernate

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

NHiber映射中的NHibernate项数

在NHibernate中有一种方法可以将计数查询的结果映射到类的属性吗?我想在XML映射中执行此操作.

我知道我可以通过代码(通过实际查询计数的构造,或通过作弊,执行完整查询,并计算结果项)来制定这个,但如果我可以编写一些简短的SQL或HQL,那将是很好的.以某种方式阻塞到我的XML映射中.

一个具体的例子.我的DB有这些表 -

Entry
  Id
  BodySummary

Comment
  Id
  EntryId
  Body
Run Code Online (Sandbox Code Playgroud)

我想得到一些条目摘要.对于每个条目,我想获得评论计数(和正文摘要).

仅供参考:我省略了我的数据库中不相关的部分,如作者,条目标题/正文,时间戳等.这当然应该与我询问的查询部分无关.

nhibernate nhibernate-mapping

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

nHibernate - 类中的对象或ObjectID

我们正在迁移当前的C#应用​​程序以使用nHibernate.由于nHibernate提升了纯粹的域驱动设计,我们可以将业务对象添加为类的属性,或者应该继续使用ID.

让我用一个例子说明这一点;

参加以下现有课程.地址(和子项)仅由其ID标识.

public class Person
{
    public int PersonID { get; set; }
    public string FirstName { get; set; }
    public string FirstName { get; set; }
    public int AddressID { get; set; }
    public List<int> ChildrenIDs { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当我们将类转换为使用nHibernate时,我们还希望借此机会更改"Person"类的结构以更好地满足需求.希望nHibernate能够在"引擎盖下"处理所有数据检索

public class Person
{
    public virtual int PersonID { get; private set; }
    public virtual string FirstName { get; set; }
    public virtual string FirstName { get; set; }
    public virtual AddressObject Address { get; set; …
Run Code Online (Sandbox Code Playgroud)

c# nhibernate domain-driven-design nhibernate-mapping

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

流畅的nhibernate - 具有属性的多对多映射

我有2个主表,它们通过地图表链接如下

User [UserId,Name]

Resource [ResourceId,Name]

UserResourceMap [UserId,ResourceId,AccessLevel]
Run Code Online (Sandbox Code Playgroud)

具有AccessLevel的Resource和User ClassMap如何作为资源属性?

我的Domain类看起来像这样

public class User
{
    public virtual int UserId { get;protected set; }
    public virtual string Name { get;set; }
}
public class Resource
{
    public virtual int ResourceId { get;protected set; }
    public virtual string Name { get;set; }
    public virtual string AccessLevel { get;set; }//Issue-populate this using fluent
}
Run Code Online (Sandbox Code Playgroud)

如何在下面的代码中使用fluent映射accessLevel属性.

public class UserMap : ClassMap<User>
    {
        public UserMap()
        {
            Table("User");
            Id(x => x.Key);
            Map(x=>x.Name);
        }
    }

public class ResourceMap …
Run Code Online (Sandbox Code Playgroud)

c# nhibernate nhibernate-mapping fluent-nhibernate

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

用流利的NH来映射视图吗?

在流利的NH中有任何方式可以将[查看]映射到c#类吗?我需要让它们只读.

nhibernate nhibernate-mapping fluent-nhibernate

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

NHibernate按代码映射和IUsertype无法正常工作

我试图通过代码使用NHibernate(v3.3)映射来获得自定义类型.我在这里尝试了这个例子,但没有运气.我想要实现的自定义类型是一个修剪来自数据库的字符串的类型.

我收到以下异常:

PropertyAccessException:无效的转换(检查映射是否存在属性类型不匹配).{"无法将'System.String'类型的对象强制转换为'ConsoleApplication1.TrimmedString'."}

这是我的全部尝试(要点).

public class TrimmedString : IUserType
{
    public object NullSafeGet(IDataReader rs, string[] names, object owner)
    {
        //treat for the posibility of null values
        string resultString = (string) NHibernateUtil.String.NullSafeGet(rs, names[0]);
        if (resultString != null)
            return resultString.Trim();
        return null;
    }

    public void NullSafeSet(IDbCommand cmd, object value, int index)
    {
        if (value == null)
        {
            NHibernateUtil.String.NullSafeSet(cmd, null, index);
            return;
        }

        value = ((string) value).Trim();

        NHibernateUtil.String.NullSafeSet(cmd, value, index);
    }

    public object DeepCopy(object value)
    {
        if (value == …
Run Code Online (Sandbox Code Playgroud)

c# nhibernate nhibernate-mapping iusertype nhibernate-mapping-by-code

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