Jit*_*Jit 6 nhibernate fluent nhibernate-mapping
我是Hibernate世界的新手.这可能是一个愚蠢的问题,但我无法解决它.我正在测试表的多个到一个关系并试图插入记录.我有一个Department表和Employee表.员工和部门在这里有多对一的关系.我正在使用Fluent NHibernate添加记录.以下所有代码.请帮忙
SQL代码
create table Dept (
    Id int primary key identity,
    DeptName varchar(20),
    DeptLocation varchar(20)
);
create table Employee (
    Id int primary key identity,
    EmpName varchar(20),
    EmpAge int,
    DeptId int references Dept(Id)
);
类文件
public partial class Dept
{
    public virtual System.String DeptLocation { get; set; }
    public virtual System.String DeptName { get; set; }
    public virtual System.Int32 Id { get; private  set; }
    public virtual IList<Employee> Employees { get; set; }
}
public partial class Employee
{
    public virtual System.Int32 DeptId { get; set; }
    public virtual System.Int32 EmpAge { get; set; }
    public virtual System.String EmpName { get; set; }
    public virtual System.Int32 Id { get; private set; }
    public virtual Project.Model.Dept Dept { get; set; }
}
映射文件
public class DeptMapping : ClassMap<Dept>   
{
    public DeptMapping()
    {
        Id(x => x.Id);
        Map(x => x.DeptName);
        Map(x => x.DeptLocation);
        HasMany(x => x.Employees).Inverse().Cascade.All();
    }
}
public class EmployeeMapping : ClassMap<Employee>
{
    public EmployeeMapping()
    {
        Id(x => x.Id);
        Map(x => x.EmpName);
        Map(x => x.EmpAge);
        Map(x => x.DeptId);
        References(x => x.Dept).Cascade.None();
    }
}
我的代码添加
        try
        {
            Dept dept = new Dept();
            dept.DeptLocation = "Austin";
            dept.DeptName = "Store";
            Employee emp = new Employee();
            emp.EmpName = "Ron";
            emp.EmpAge = 30;
            IList<Employee> empList = new List<Employee>();
            empList.Add(emp);
            dept.Employees = empList;
            emp.Dept = dept;
            IRepository<Dept> rDept = new Repository<Dept>();
            rDept.SaveOrUpdate(dept);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
我在这里得到错误
InnerException = {"无效的列名'Dept_id'."} Message ="无法插入:[Project.Model.Employee] [SQL:INSERT INTO [Employee](EmpName,EmpAge,DeptId,Dept_id)VALUES(?,?, ?,?);选择SCOPE_IDENTITY()]"
Mattias的答案几乎是正确的,但ForeignKey用于模式生成.请尝试以下映射.此外,您还有使用CascadeAll映射的Employees集合.如果删除部门,这将删除员工记录,这可能是不可取的.
public class DeptMapping : ClassMap<Dept>
    { 
        public DeptMapping() 
        {
            Id(x => x.Id); 
            Map(x => x.DeptName); 
            Map(x => x.DeptLocation); 
            HasMany(x => x.Employees).KeyColumn("DeptId").Inverse().Cascade.All(); 
        } 
    }
public class EmployeeMapping : ClassMap<Employee>
{ 
    public EmployeeMapping() 
    { 
        Id(x => x.Id); 
        Map(x => x.EmpName); 
        Map(x => x.EmpAge); 
        Map(x => x.DeptId); 
        References(x => x.Dept, "DeptId").Cascade.None(); 
   } 
}
| 归档时间: | 
 | 
| 查看次数: | 25021 次 | 
| 最近记录: |