【问题标题】:saving value in database using nhibernate使用 nhibernate 在数据库中保存值
【发布时间】:2013-12-28 07:25:52
【问题描述】:

我正在使用Nhibernate 并希望将值保存在数据库中,如下所示。 这是我的商店课程

 public class Store
    {
        public virtual int Id { get; protected set; }
        public virtual string Name { get; set; }
        public virtual Employee Staff { get; set; }

        public Store()
        {            Staff = new Employee();
           }
}

这是employee class

 public class Employee
    {
        public virtual int Id { get; protected set; }
        public virtual string FirstName { get; set; }
        public virtual string LastName { get; set; }
        public virtual Store Store { get; set; }
    }

storemap作为

  public class StoreMap:ClassMap<Store>
    {
        public StoreMap() 
        {
            Id(x => x.Id);
            Map(x => x.Name);
            HasOne(x => x.Staff).WithForeignKey("store");
             HasManyToMany(x => x.Products).Cascade.All();        }
    }
}

employee map

public class EmployeeMap : ClassMap<Employee>
{
    public EmployeeMap ()
    {
        Id(x => x.Id);
        Map(x => x.FirstName);
        Map(x => x.LastName);
        References(x => x.Store  ).WithColumns("store");
        References(x => x.Store2).WithColumns("store2");

    }

}

在存储表中,我只保存表的名称。在员工表中,我保存了员工的firstnamelastaname 以及商店的foreignkey,以了解该员工属于哪个表。 我写了这行代码

using (var trans = session.BeginTransaction())
                {
                    var ali = new Employee { FirstName = "fname", LastName = "lname", store=2 };
                    session.SaveOrUpdate(ali);
                    trans.Commit();
                }

但这不能隐式转换 int int models.store Employee.Store。这仅适用于 store=2 首先和 lastaname 正在工作。请帮忙

【问题讨论】:

标签: c# sql nhibernate


【解决方案1】:

在商店类中为员工添加List

Public virtual Ilist<Employee> Employees {get; set;} // this list will save employees as per store 

并添加以下添加员工的方法

public virtual void add_employee(Employee emp)
    {
        emp.Store = this; // its current store value
        employees.Add(emp);
    }

并在添加新员工时调用此方法

using (var trans = session.BeginTransaction())
            {
                var ali = new Employee { FirstName = "fname", LastName = "lname"};
               var stor = new Store { Id = "1", Name= "Firststore"}; // for creating new store 
               AddEmployees(stor,emp);
                session.SaveOrUpdate(ali);
                session.SaveOrUpdate(stor);
                trans.Commit();
            }

           Public void AddEmployees(Store str, Employee emp)
           {
              str.add_employee(emp);
           }

试试这个代码。如果有任何疑问,请在这里评论

编辑:

当您不想使用一对多时,在添加员工之前创建商店并将其添加到员工

var stor = new Store { Id = "1", Name= "Firststore"};


var ali = new Employee { FirstName = "fname", LastName = "lname" , Store = stor};

【讨论】:

  • 实际上我想要员工和商店之间的一对一关系,此时我只想在员工表中保存价值而不是在商店中,只想在员工中使用商店的ID,我之前做过正如您所指导的,这项工作很好,但我想要一对一,当我使用一对一时,是否需要创建 IList?谢谢
  • 然后列出不需要,那么您的问题是什么?任何错误或异常?
  • var ali = new Employee { FirstName = "fname", LastName = "lname", Store=2 };我无法为存储分配价值。 fname 和 lname 分配给第一个和最后一个 anem。但是当尝试使用 2 来存储此结果时,无法将 int 隐式转换为 models.store
  • 您已在员工类中将其声明为“商店”。所以你不能直接给它分配 int 值。以及为什么要分配 int 值来存储?
  • 对于与store的关系,这个store是employee表中的外键,因为每个员工都属于store,所以我使用store值,请指导如何将员工保存在store表中
猜你喜欢
  • 1970-01-01
  • 2016-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-26
  • 2023-03-11
相关资源
最近更新 更多