Fluent NHibernate HasMany 集合未填充

发布于 2024-12-08 20:03:28 字数 1274 浏览 0 评论 0原文

我在设置 Fluent NHibernate HasMany 集合时遇到问题。

我已将代码设置如下,并通过 Linq IQueryable 调用它。 在 SQL Profiler 中,我可以看到调用了正确的 SQL,但 Store.Staff 集合始终为空。

    public class Store
    {
        public virtual IList<Employee> Staff { get; set; }

        public virtual void AddEmployee(Employee Employee)
        {
            Employee.Store = this;
            if(Staff == null)
                Staff = new List<Employee>();
            Staff.Add(Employee);
        }


    public class StoreMap : ClassMap<Store>
    {
        public StoreMap()
        {
            Id(x => x.StoreId)
                .GeneratedBy.Identity();

            HasMany(x => x.Staff)
                  .Inverse()
                  .Cascade.All();            
       ...
        }
    }


    public bool Create(Store entity)
    {
        var stores = _readRepository.Query<Store>()
            .Where(x => x.StoreId == entity.StoreId)
            .Fetch(x => x.Staff)
            .ToList();



select store0_.StoreId, 
       staff2_.SurgeryId,
       staff2_.StoreId  
from   dbo.[Store] store0_
       left outer join dbo.[Employee] staff2_
         on store0_.StoreId = staff2_.StoreId
where  store0_.StoreId = 1 /* @p0 */

感谢您的任何帮助。

I am having trouble setting up a Fluent NHibernate HasMany collection.

I have set the code up as below and I'm calling it via Linq IQueryable.
In SQL Profiler, I can see the correct SQL getting called, but the Store.Staff collection is always empty.

    public class Store
    {
        public virtual IList<Employee> Staff { get; set; }

        public virtual void AddEmployee(Employee Employee)
        {
            Employee.Store = this;
            if(Staff == null)
                Staff = new List<Employee>();
            Staff.Add(Employee);
        }


    public class StoreMap : ClassMap<Store>
    {
        public StoreMap()
        {
            Id(x => x.StoreId)
                .GeneratedBy.Identity();

            HasMany(x => x.Staff)
                  .Inverse()
                  .Cascade.All();            
       ...
        }
    }


    public bool Create(Store entity)
    {
        var stores = _readRepository.Query<Store>()
            .Where(x => x.StoreId == entity.StoreId)
            .Fetch(x => x.Staff)
            .ToList();



select store0_.StoreId, 
       staff2_.SurgeryId,
       staff2_.StoreId  
from   dbo.[Store] store0_
       left outer join dbo.[Employee] staff2_
         on store0_.StoreId = staff2_.StoreId
where  store0_.StoreId = 1 /* @p0 */

Thanks for any help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

我还不会笑 2024-12-15 20:03:28

不确定这就是问题所在,但您应该使用 FetchMany 来急切地加载集合,而不是 Fetch。

Not sure this is the problem, but you should be using FetchMany to eagerly load collections, not Fetch.

蓝天白云 2024-12-15 20:03:28

我混淆了框架的两个部分。我正在使用 Linq 检索数据,但无法立即加载。
我现在使用 NHibernate.Session.QueryOver,而不是使用 Linq。

I was confusing two parts of the framework. I was using Linq to retrieve the data and couldn't eagerly load.
Instead of using Linq, I now use NHibernate.Session.QueryOver.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文