Fluent NHibernate 多对一映射

2023-11-22

我是休眠世界的新手。这可能是一个愚蠢的问题,但我无法解决它。我正在测试表的多对一关系并尝试插入记录。我有一个部门表和员工表。员工和部门在这里是多对一的关系。我正在使用 Fluent NHibernate 添加记录。以下所有代码。请帮忙

SQL Code

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 (?, ?, ?, ?); select 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(); 
   } 
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Fluent NHibernate 多对一映射 的相关文章

  • 如果 2 个或更多人同时更新记录会发生什么?

    我使用 NHibernate 的版本属性 每次更新聚合根时该属性都会自动递增 如果 2 个或更多人同时更新同一条记录会发生什么 另外 我将如何测试这个 请注意 这不是我遇到过的情况 只是想知道 什么是原子的 什么不是 正如其他人所说 SQL
  • 使用 Fluent NHibernate、Oracle 10g 和 OracleClientConfiguration.Oracle10 映射 clob

    我一直在尝试使用 Fluent NHibernate 1 2 0 712 针对 Oracle 10g 映射 clob 字段 我正在使用 System Data 提供程序 因为它默认可用 并试图避免由于以前的客户端问题而添加对 ODP Net
  • 如何将 NHibernate 与 System.Tuple 等不可变类型一起使用?

    我有一个复合映射使用System Tuple
  • Nhibernate - 使用没有关系的连接表进行查询

    我想知道是否有人尝试在 NHibernate 中这样做 我有下表 简化版本 城市 城市 varchar2 PK 省份 varchar2 PK 城市 TL 城市 varchar2 PK 省份 varchar2 PK 郎 字符 2 PK 地点
  • ORM 是用于迁移数据的正确工具吗?

    背景 我们正在升级旧版导入工具 它的作用是将数据从连接到 SQL Server 的一个数据库移动到同一服务器上的第二个数据库 并使用不同的模式沿途执行转换和映射 这是一个帮助解释正在发生的事情的示例 假设源数据库有一张表名为Client I
  • 为什么 nhibernate 3.3 不允许 ICollection 上的私有 setter?

    我从 nhibernate 3 2 升级到 nhibernate 3 3 并且在我的域类中定义了很多虚拟成员 如下所示 public virtual ICollection
  • 使用 NHibernate 深复制实体

    我目前正在工作中启动一个新的 ASP NET MVC 项目 我们需要生成项目成本估算 我们使用 NHibernate ASP NET MVC 1 0 和 StructureMap 客户希望能够填写有关项目的所有信息 这些信息位于不同的页面中
  • 如何Moq Fluent接口/链方法

    我正在使用 Daniel Cazzulino 的 moq 框架 kzu 版本 4 10 1 我想要最小起订量 这样我就可以测试功能的特定部分 下面是我可以提取的代码的简单版本 流畅 链方法的设计是为了让您可以通过 Id 获取对象 并在需要时
  • Nhibernate ICriteria 和在查询中使用 Lambda 表达式

    你好 我是 NHibernate 的新手 我有点困惑 假设我们有一个product桌子 让product表有 2 列价格1 和价格2 然后我可以通过 HQL 查询映射的产品实体 如下所示 string queryString from pr
  • 如何在使用 NHibernate 进行任何插入之前增加 ID

    看起来NH只获取一次MAX ID 第一次插入然后在内部存储这个值 这会在其他进程插入数据时给我带来一些问题 然后我没有实际的 ID 并且抛出重复键异常 假设我们有桌子Cats CREATE TABLE Cats ID int Name va
  • 如何将 NHibernate 和 DTO 与 RIA 服务结合使用

    我将 NHibernate 与 RIA 服务和 Silverlight 4 一起使用 我创建 DTO 来通过 RIA 服务传输数据 而不是分发我的域层对象 根据 Martin Fowler 的分布式对象设计第一定律 不要分发您的对象 DTO
  • 将 nHibernate 3.x 与 Jet 驱动程序结合使用 (Microsoft Access)

    我正在开发一个 nHibernate 项目 该项目使用 Access 数据库作为数据源 不幸的是 我在运行时遇到问题 因为我找不到支持 nHibernate 3 x 的 Jet 驱动程序 我已经从 trunk 下载了源代码并编译了它 但事实
  • 流畅的 NHibernate 和 XML 列

    我正在从头开始构建一个新站点 并正在考虑使用 Fluent NHibernate 作为我的 ORM 我认为它可以轻松处理所有事情 可能除了我的 XML 列 我从来没有使用 NHibernate 构建过网站 尽管我使用过 Hibernate
  • Get 和 Load 之间的区别

    有什么区别Get
  • NHibernate 具有多个数据库和事务

    我们在理解如何最好地使用 NHibernate 时遇到了一些问题 我们通常拥有相对大量 就表数量而言 的 SQL Server 数据库 而不是一个包含大量对象的数据库 我们正在研究处理多个会话工厂的各种选项 并且可能已经控制住了这一点 但是
  • 流畅的 Hibernate 问题

    我的实体中有这个 public virtual Iesi Collections Generic ISet
  • nHibernate + wcf + Isession

    我有一个包含 3 个项目的 C 解决方案 数据 WCF 和 UI 第一个是与数据库对话的类库 它通过第二个项目公开 该项目的类型为 WCF 服务库 原因是它将在第三个项目 称为 UI 的 Asp net 应用程序 作为指向 dll 的简单
  • NHibernate 获取 & 字符串 Id

    我在 NHibernate 上有一个分配了字符串 Id 的实体 并且在通过 Id 获取实体时遇到了一些问题 例子 假设有这样的数据库记录 Id Description AAA MyDescription 现在 如果我使用搜索 ID aaa
  • 从实体获取单列

    如何从查询中获取单个列而不是整个对象 我可以这样做来获取整个对象 但我想要的只是名称 IList
  • 如何判断一个引用的对象是否可以删除?

    我有一个名为 Customer 的对象 它将在其他表中用作外键 问题是我想知道是否可以删除 客户 即 它没有在任何其他表中引用 Nhibernate 可以做到这一点吗 你所要求的是找到的存在CustomerPK值在引用表FK列中 有很多方法

随机推荐

  • 将线程分配给特定的CPU核心

    AFAIK 在 Linux 中可以将线程分配给 CPU 核心 看this 但是 我的问题是我可以使用以下方法实现此功能吗boost如果可能的话 又是如何实现的呢 请注意 操作系统也不能决定哪个对我来说更好 而是假设我想在设计中控制这种行为
  • Java 通过谓词将流拆分为流的流

    我正在阅读数百个大型 6GB gzip 日志文件GZIPInputStream是我想解析的 假设每一项的格式如下 Start of log entry 1 some log details some log details some log
  • 在 BigQuery 中查询多个重复字段

    我有一个架构 其中包含多个未嵌套的重复字段 我正在尝试查询叉积 但出现错误 无法查询重复字段的叉积 如果我只查询 2 个重复字段 我可以将其中之一展平 然而 我有兴趣查询超过 2 个重复字段 并且我无法理解 FLATTEN 语法如何支持这一
  • 如何将 Android Studio 完全安装到非默认 (D:) 驱动器

    我将从高级 常识 问题开始 然后进入技术细节 高级问题 在 Windows 10 中运行 Android Studio 安装程序时 我告诉它安装到 D 驱动器 而不是默认的 C 驱动器 为什么它坚持将某些组件安装到 C 驱动器上 安装到非默
  • 在 Java Web 应用程序中加载外部库

    我的场景如下 我有一个部署到 servlet 容器的 WebApp war 此 WebApp war 在 WEB INF lib 中包含以下库 lib a jar lib b jar 我还有另一个库 例如 lib vendor jar 由于
  • 在 xcode 中仍然出现 文件未找到错误

    我是 PhoneGap 的新手 通过 Xcode 制作应用程序 但我发现了一个错误CDVViewController h 然而 该文件实际上存在于那里 我正在使用 Xcode 4 6 和 Cordova 2 2 0 伙计 这个问题有很多转移
  • AWS ECS 运行任务时出错:在集群中找不到容器实例

    我正在尝试部署一个docker容器镜像到AWS using ECS 但未创建 EC2 实例 我在互联网上搜索了有关为什么收到以下错误的解释 调用 RunTask 操作时发生客户端错误 InvalidParameterException 在集
  • 为什么使用 0 作为“停止”的切片表示法反转列表不会返回整个列表?

    在以下示例中 foo red white blue 1 2 3 foo 0 6 1 将打印所有元素foo 然而 foo 6 0 i 1 将省略第 1 个或第 0 个元素 gt gt gt foo 6 0 1 3 2 1 blue white
  • 在 R 公式中使用带有特殊字符的列

    我正在尝试使用 rpart 使用大约 200 列的数据框来制作决策树 其中一些列的名称中包含数字 一些列的名称中包含特殊字符 例如 当我尝试生成树时 出现如下错误 R gt gg rpart lt rpart nospecialchar S
  • Oracle 中的 Unique 与 Distinct 关键字

    我对这些词的用法有点困惑 我有一个包含以下列的表格 站点 纬度 长 名称 我想要具有独特 或不同 LAT LONG 的结果 我该如何实现这一目标 select unique colA colB from atable select dist
  • 持久化 hashlib 状态

    我想创建一个hashlib实例 update 然后以某种方式保留其状态 稍后 我想使用此状态数据重新创建对象 并继续update 它 最后 我想得到hexdigest 数据的总累积运行 状态持久性必须在多次运行中保持不变 Example i
  • H.264 RTSP 绝对时间戳

    是否可以从安讯士摄像机通过 RTSP 发送的 H 264 流中读取绝对时间戳 有必要知道相机何时拍摄该帧 谢谢 安德里亚 正如拉尔夫已经说过的 RTP 时间戳与随机时钟相关 它们仅用于计算两个帧 或一般的 RTP 数据包 之间的差异 为了将
  • 如何在运行时检查内存地址是否可写?

    如何在运行时检查内存地址是否可写 例如 我想在以下代码中实现 is writable address 是否可以 include
  • 使用 JSON 返回 Razor 部分视图 (ASP MVC 3)

    在使用常规视图引擎的 MVC 2 中 我可以通过字符串返回 ascx 部分视图return Json 但对于新的 Razor cshtml 视图 我不知道如何做到这一点 我不断得到Type ASP CustomerForm cshtml d
  • SonarQube LDAP 身份验证似乎已加载,但不允许通过域用户登录

    我一直在尝试使用 LDAP 身份验证插件 v1 4 设置 SonarQube v4 1 但我无法让它针对我的域用户进行身份验证 我的配置设置如下 LDAP configuration General Configuration sonar
  • 如何在 android 中使用 xmlpullparser 从嵌套 xml 中提取文本?

  • 在 spritekit 中模拟水/使精灵“漂浮”在水面上

    我正在努力为我的比赛加水 除了背景颜色不同之外 没有什么其他的 不过 我想要player sprite漂浮在它的顶部 或一半 如果玩家只是从下面走进水中 我希望他浮到上面 如果他摔倒了 我希望他能慢慢改变方向并浮起来 当他在水中时 我尝试将
  • DLL 中的 VCL 样式正在影响应用程序中的 TMenuItem

    我使用的是Delphi XE6 和VCL 样式 我有主要的应用程序和 dll 我的主应用程序已启用运行时主题 并且我正在使用 vcl 样式文件 我对 DLL 做了非常相似的事情 我启用了运行时主题 并在使用和资源文件下添加了 VCL The
  • 未应用相对布局重力?

    我有一个具有以下布局的活动
  • Fluent NHibernate 多对一映射

    我是休眠世界的新手 这可能是一个愚蠢的问题 但我无法解决它 我正在测试表的多对一关系并尝试插入记录 我有一个部门表和员工表 员工和部门在这里是多对一的关系 我正在使用 Fluent NHibernate 添加记录 以下所有代码 请帮忙 SQ