我在两个班级之间有多对多的关系:比赛和球员
我在映射中设置了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) Noob问题.
我有这种情况,我有这些对象:
class Address
{
string Street;
string City;
...
}
class User
{
string UserID;
Address BillingAddress;
Address MailingAddress;
...
}
Run Code Online (Sandbox Code Playgroud)
使用(流畅的)nHibernate存储这些数据的正确方法是什么?我可以使用一个单独的地址表并创建一个引用,但它们是1:1的关系,所以我真的不想招致连接的开销.理想情况下,我会将其存储为单个平面记录.
所以,我的问题是,以这样一种方式存储"用户"类实例的正确方法是什么,它将其内容以及两个地址存储为单个记录?我的知识让我失去了如何以两种地址记录获得不同列名(例如BillingAddress_Street和MailingAddress_Street)的方式存储此信息,以及如何将记录读回用户实例.
我正在尝试创建一个新项目,我想使用NHibernate(特别是Fluent NHibernate).
学习新技术的最大问题就是设置它,我遇到了很多困难.我开始看这个(http://dotnetslackers.com/articles/ado_net/Your-very-first-NHibernate-application-Part-1.aspx#download-fluent-nhibernate),但它似乎已经过时,因为我也看了这个(http://wiki.fluentnhibernate.org/Getting_started#Installation),他们有不同的二进制文件.
还有其他一些指南,但大多数人都认为你的项目已经有了NHiberate,而且它只是设置Fluent NHibernate的指南.
任何简单的指南都可以帮助您进行设置,从一开始就使用File - New Project?
我不知道它是否有所作为,但我使用的是.NET 4.0和MVC.
在选择与NHibernate一起使用的身份生成器时,我应该考虑什么?
例如简单流畅的映射:
Id(c => c.ID).GeneratedBy.HiLo("User");
Map(c => c.Username).Not.Nullable().Length(50);
Map(x => x.Password).Not.Nullable().Length(40);
Run Code Online (Sandbox Code Playgroud)
有了这个POCO:
public class User
{
public virtual long ID { get; private set; } // This could be changed to GUID etc
public virtual string Username { get; set; }
public virtual string Password { get; set; }
public User ()
{
}
}
Run Code Online (Sandbox Code Playgroud)
这应该使用HiLo,uuid.hex,HiLoseq等......为什么?
我有一个Fluent NHibernate映射覆盖,我用它来创建一个HasMany组件.有没有办法让NH在组件表中的FK列上创建聚簇索引?在下面的示例中,我想要ItemDetailFk列上的聚簇索引.谢谢!
public class ItemDetailMap : IAutoMappingOverride<ItemDetail>
{
public void Override(AutoMapping<ItemDetail> mapping)
{
mapping.HasMany<ItemDetailUDF>(x => x.UserDefinedFields)
.Table("ItemUDF")
.KeyColumn("ItemDetailFk")
.Not.LazyLoad()
.Fetch.Subselect()
.Component(udfObj =>
{
udfObj.Map(x => x.UDFSequence);
udfObj.Map(x => x.String0);
udfObj.Map(x => x.String1);
udfObj.Map(x => x.String2);
});
}
}
Run Code Online (Sandbox Code Playgroud) 我试图在Nhibernate ICriteria中复制以下sql
SELECT DISTINCT AP.ID
FROM ActivityParts AP
INNER JOIN ActivityBookings AB ON AB.ActivityPartID = AP.ID
INNER JOIN OrderPartBookings OPB ON OPB.ActivityBookingID = AB.ID
INNER JOIN OrderParts OP ON OP.ID = OPB.OrderPartID
INNER JOIN Orders O ON O.ID = OP.OrderID
LEFT JOIN Invoices I ON I.ID = (SELECT TOP 1 ID FROM Invoices WHERE OrderReferenceID = OP.ID AND Cancelled = 0 ORDER BY Created DESC)
WHERE
O.OrderStatus != 'Cancelled'
AND OP.Payed = 0
AND (I.ID IS NOT NULL AND DATEADD(Day,1, …Run Code Online (Sandbox Code Playgroud) sql subquery icriteria fluent-nhibernate nhibernate-criteria
我有桌子
ID, CategoryID, ...)ID, Name, ..)和ID, ProductID, Value...)这是我的查询:
select count(*) from Product as p, FieldValue as v, Category c
where c.ID = 3 and v.Value="XXX"
and p.ID = v.ProductID and c.ID=p.CategoryID
group by p.ID
Run Code Online (Sandbox Code Playgroud)
我的意图很明显是按一定标准计算产品数量.
问题是NHibernate给我一个数字列表,而不是一个带有产品数量的数字.我错过了什么?
任何帮助是极大的赞赏.
当没有引用父项的子项时,我需要删除父项.这可能在Hibernate中吗?(实际上我正在使用流利的nhibernate,但我认为答案是一样的)
例如,我有很多来自不同公司的客户.当我删除公司的最后一个客户时,我想自动删除公司的详细信息.
与正常的亲子关系不同,我不会有意识地选择删除公司.就用户而言,他只是删除了一个客户; 删除未引用的公司只是其中的副产品.
我将使用以下方法在数据库中插入对象列表:
public static void InsertObjekts(List<Objekt> objekts)
{
var session = SessionManager.CurrentSession;
using (var transaction = session.BeginTransaction())
{
session.SaveOrUpdate(objekts);
transaction.Commit();
}
}
Run Code Online (Sandbox Code Playgroud)
但是我遇到了麻烦。no persister for System.Generic.List;
当我遍历列表以自己插入每个元素时,它只会在第一次迭代中进行,因为那时我没有会话。有人可以给我一些有关此主题的提示。
在我的域名中,我有一个Transport可以Endpoints在某些位置访问的内容,因此我有以下内容:
public class Transport
{
public IDictionary<Endpoint, int> AccessPointPosition { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在我试图AccessPointPosition通过组合HasMany和映射AsMap,但我没有成功找到任何通过Fluent NHibernate配置的东西.
我忽略了什么吗?这不可能吗?有关于这个主题的文件吗?
nhibernate ×8
c# ×5
sql ×2
.net ×1
dictionary ×1
hibernate ×1
icriteria ×1
orm ×1
persist ×1
subquery ×1