当你在流畅的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; }
}
Run Code Online (Sandbox Code Playgroud)
地图覆盖类:
public class EventMapOverride : IAutoMappingOverride<Event>
{
public void Override(AutoMapping<Event> mapping)
{
mapping.HasMany(c => c.People)
.AsSet()
.Cascade.AllDeleteOrphan();
}
}
Run Code Online (Sandbox Code Playgroud)
从流畅的自动播放器生成的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>
Run Code Online (Sandbox Code Playgroud)
怎么了?
我有一个要求加载一个名为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 …Run Code Online (Sandbox Code Playgroud) 如何使用具有Fluent NHibernate的AutoMap持久性模型"打开"级联保存?
如:
我救人,手臂也应该保存.目前我明白了
"对象引用未保存的瞬态实例 - 在刷新之前保存瞬态实例"
public class Person : DomainEntity
{
public virtual Arm LeftArm { get; set; }
}
public class Arm : DomainEntity
{
public virtual int Size { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我发现了一篇关于这个主题的文章,但似乎已经过时了.
流利的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;
}
}
Run Code Online (Sandbox Code Playgroud)
后来我需要调用这个类方法,如下所示:
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);
}
Run Code Online (Sandbox Code Playgroud)
注意,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;}
}
Run Code Online (Sandbox Code Playgroud)
正如您可能想到的那样,我希望这是一个每个层次结构的表 - 映射与子类的列表是多对多.就像表'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 …Run Code Online (Sandbox Code Playgroud) .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 …Run Code Online (Sandbox Code Playgroud)