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)
);
Run Code Online (Sandbox Code Playgroud)
类文件
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; }
}
Run Code Online (Sandbox Code Playgroud)
映射文件
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();
}
}
Run Code Online (Sandbox Code Playgroud)
我的代码添加
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);
}
Run Code Online (Sandbox Code Playgroud)
我在这里得到错误
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();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25021 次 |
| 最近记录: |