gpt4 book ai didi

c# - Fluent NHibernate C# 中的基本关系问题

转载 作者:太空宇宙 更新时间:2023-11-03 11:30:43 26 4
gpt4 key购买 nike

我找不到这方面的例子。我试图对 Fluent NHibernate 有一个基本的了解,但就适当的教程而言,资源似乎非常稀缺。

我有一个这样的测试类:

public class User
{
public virtual long ID { get; set; }
public virtual string Username { get; set; }
public virtual MoreDetails ExtendedDetails { get; set; }
}

另一个类是这样的:

public class MoreDetails
{
public virtual long ID { get; set; }
public virtual string Firstname { get; set; }
public virtual long UserID { get; set; } // Foreign key in the DB
}

我的映射到底应该是什么样的?

如何使用惰性加载或急切加载正确查询数据库才能执行此操作:

// user object instantiated using your provided example:
userObject.ExtendedDetails.Firstname

我觉得自己像个白痴.. 通常我可以遵循文档,但这种用法非常模糊。谁能给我指出一个合适的例子(或给出一个例子)?

我使用的是直接来自 Fluent NHibernate 网站的最新 Fluent NHibernate。

问候,

化学

最佳答案

这里有一个很好的演练,可以帮助您启动和运行:http://dotnetslackers.com/articles/ado_net/Your-very-first-NHibernate-application-Part-1.aspx

您的映射看起来像这样。请注意,我对您希望如何生成身份以及这些实体之间的映射类型做出了一些假设。

public class User
{
public int ID { get; set; }
public string Username { get; set; }
public MoreDetails ExtendedDetails { get; set; }
}

public class MoreDetails
{
public int ID { get; set; }
public string Firstname { get; set; }
public User User { get; set; } // Foreign key in the DB
}

public UserMapping()
{
Not.LazyLoad();
Id(e => e.ID).GeneratedBy.Identity();
Map(e => e.Username).Not.Nullable();
HasOne(x => x.ExtendedDetails)
.Cascade
.SaveUpdate();
}

public MoreDetailsMapping()
{
Not.LazyLoad();
Id(e => e.ID).GeneratedBy.Identity();
Map(e => e.Firstname).Not.Nullable();
References(x => x.User).Column("UserID");
}

为了查询您的关系数据,您需要在 nhibernate 中打开一个 session 。我通常会按照这个思路创建一个助手。

 public class NHibernateHelper
{
private static ISessionFactory _sessionFactory;

private static ISessionFactory SessionFactory
{
get
{
if (_sessionFactory == null)
InitializeSessionFactory();

return _sessionFactory;
}
}

private static void InitializeSessionFactory()
{
_sessionFactory = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008
.ConnectionString(@"Server=localhost\SQLExpress;Database=SomeDB;Trusted_Connection=True;")
.ShowSql()
)
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<User>())
.BuildSessionFactory();
}

public static ISession OpenSession()
{
return SessionFactory.OpenSession();
}
}

从那里你可以像这样直接查询:

public IQueryable<User> Users
{
get { return NHibernateHelper.OpenSession().Query<User>(); }
}

请注意,我在此省略了很多内容,但希望这能帮助您入门和运行。

关于c# - Fluent NHibernate C# 中的基本关系问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7883960/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com