当你在流畅的NHibernate中设置字符串值时,它会将数据库值设置为Nvarchar(255),我需要存储相当多的基于用户输入的长字符串,而255是不切实际的.
只是为了添加这个是自动播放器的问题,因为我使用流畅的NHibernate来构建数据库.
c# nhibernate fluent-nhibernate automapping sharp-architecture
每当我尝试创建一个特定的实体时获得这个......只是想知道我应该如何找出原因.
我正在使用Fluent NHibernate自动化,所以也许我没有适当地设置约定和/或需要覆盖一个或多个映射文件中的某些东西.我已经通过网络上关于这个问题的一些帖子,并且很难弄清楚为什么它会发生在我的案例中.
我正在保存的对象非常简单.它是一个引用"公司"实体并具有"地址"实体集合的"人"对象.UPDATES在已存在于数据库中的现有Person对象上正常工作.
建议?
谢谢-wg
我收到此错误:
无法转换'NHibernate.Collection.Generic.PersistentGenericSet
1[IocWinFormTestEntities.People]' to type 'System.Collections.Generic.ISet1 [IocWinFormTestEntities.People]' 类型的对象.
实体:
public class Event 
{
    public Event()
    {
        this.People = new HashSet<People>();
    }
    public virtual Guid Id { get; private set; }
    public virtual ISet<People> People { get; set; }
}
地图覆盖类:
public class EventMapOverride : IAutoMappingOverride<Event>
{
    public void Override(AutoMapping<Event> mapping)
    {
        mapping.HasMany(c => c.People)
            .AsSet()
            .Cascade.AllDeleteOrphan();
    }
}
从流畅的自动播放器生成的hbm:
<set cascade="all-delete-orphan" name="People">
    <key>
        <column name="Event_id" />
    </key>
    <one-to-many class="IocWinFormTestEntities.People, IocWinFormTestEntities, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</set>
怎么了?
我有一个要求加载一个名为Node的复杂对象...它不是那么复杂...它看起来如下: -
一个节点有一个参考的EntityType具有一对多与物业这反过来有一对多与PorpertyListValue
public class Node
{
    public virtual int Id
    {
        get;
        set;
    }
    public virtual string Name
    {
        get;
        set;
    }
    public virtual EntityType Etype
    {
        get;
        set;
    }
}
public class EntityType
{
    public virtual int Id
    {
        get;
        set;
    }
    public virtual string Name
    {
        get;
        set;
    }
    public virtual IList<Property> Properties
    {
        get;
        protected set;
    }
    public EntityType()
    {
        Properties = new …如何使用具有Fluent NHibernate的AutoMap持久性模型"打开"级联保存?
如:
我救人,手臂也应该保存.目前我明白了
"对象引用未保存的瞬态实例 - 在刷新之前保存瞬态实例"
public class Person : DomainEntity
{
  public virtual Arm LeftArm { get; set; }
}
public class Arm : DomainEntity
{
  public virtual int Size { get; set; }
}
我发现了一篇关于这个主题的文章,但似乎已经过时了.
流利的NHibernate不喜欢这样,抛出一个错误:
{"关联引用未映射的类:System.String"}
好的,我明白为什么这会导致问题 - 但最好的解决办法是什么?
我真的不希望它在单个字段中存储分隔符的字符串列表,如果我的列表包含许多字符串,这将变得很难看.
由于显而易见的原因,我也不太想要一个表'字符串'.
我想我可以通过将我的List<string>内部包裹在一个类中来解决这个问题,但这感觉有点重量级.我开始认为它是最好的解决方案.
让Fluent NHibernate处理这个问题的最佳方法是什么?
我完全希望这些值存储在另一个表中.我想也许我可能已经能够设置一些指示NHibernate的自动化约定'如果你看到class X包含的那个List<*some primitive type*>,那么继续并自动创建一个映射到这个集合的引用表.
将一个集合中的每个集合包装起来感觉有点沉重.如果这是最好的解决方案,那么就这样吧.
如何使用泛型将DataReader对象映射到类对象?
例如,我需要执行以下操作:
public class Mapper<T>
    {
        public static List<T> MapObject(IDataReader dr)
        {
            List<T> objects = new List<T>();
            while (dr.Read())
            {
                //Mapping goes here...
            }
            return objects;
        }
    }
后来我需要调用这个类方法,如下所示:
IDataReder dataReader = DBUtil.Fetchdata("SELECT * FROM Book");
List<Book> bookList = Mapper<Book>.MapObject(dataReder);
foreach (Book b in bookList)
{
     Console.WriteLine(b.ID + ", " + b.BookName);
}
注意,Mapper - 类应该能够映射由T表示的任何类型的对象.
我正在使用一个使用一些非常难看的约定的现有数据库.我想使用NHibernate,我想我可以使用Fluent NHibernate的自动映射约定修复所有这些丑陋的数据库约定.我想避免手工编写所有实体类.(这是LINQ to SQL和SubSonic的吸引力)
是否可以根据我的数据库模式和Fluent NHibernate中指定的映射生成我的C#实体?
旁白:你知道NHibernate的设计师吗?
我不知道什么.我坐在这里有一个解决方案我有1个超类,有2个子类,我现在使用JoinedSubClass映射它,但我得知这个方法已经过时,并说我应该使用ClassMap和SubClassMap,但如果我这样做AutoMapping不起作用,我不希望这样.这有什么解决方法吗?
这是层次结构:
public class Tag : Entity
{
public virtual string Name {get;set;}
public virtual User User {get;set;}
}
public class RespondentTag : Tag
{
    public virtual IList<Respondent> Respondents {get;set;}
}
public class ArchiveTag : Tag
{
    public virtual IList<Survey> Surveys {get;set;}
}
正如您可能想到的那样,我希望这是一个每个层次结构的表 - 映射与子类的列表是多对多.就像表'Tag',然后是Tag_Respondent和Tag_Archive(用于多对多关系).
这是我目前正在使用的映射:
public class TagMap : IAutoMappingOverride<Tag>
{
  public void Override(AutoMapping<Tag> mapping)
  { 
     //This is obsolete
     mapping.JoinedSubClass("RespondentTagId", RespondentTagMap.AsJoinedSubClass());
     mapping.JoinedSubClass("ArchiveTagId", ArchiveTagMap.AsJoinedSubClass());
  }
}
public class RespondentTagMap
{
    public static Action<JoinedSubClassPart<RespondentTag>> AsJoinedSubClass()
    {
     return part =>
        part.HasManyToMany(x ….net nhibernate fluent-nhibernate automapping joined-subclass
我试图在OneToMany关联上映射相同类型的属性.我试图与描述区分,但有点卡在这里.
public class User
{
    public virtual int UserId { get; set; }
    public virtual string UserName { get; set; }
    [Description("From")]
    public virtual IList<Message> FromMessageList { get; set; }
    [Description("To")]
    public virtual IList<Message> ToMessageList { get; set; }   
}
public class Message
{
    public virtual int MessageId { get; set; }
    public virtual string Text { get; set; }
    [Description("From")]
    public virtual User FromUser { get; set; }
    [Description("To")]
    public virtual User ToUser { get; set; }
}
    public …