Fluent NHibernate 使用 FluentMappings 忽略 ClassMap 内的属性

2023-12-09

我在我的项目中使用 NHibernate 3.1 和 Fluent NHibernate 作为 ORM。我需要有一个被 Fluent NHibernate 忽略的 POCO 属性。起初,我的帖子可能看起来与这个问题,但事实并非如此。

我的复杂性首先来自以下事实:POCO 是在与映射不同的程序集中定义的,并且我正在使用流畅的映射对于我的 POCO。我有额外的要求,不要在会话工厂配置发生的地方编写 inore-property 代码(这发生在模块外部的集中位置),而是作为定义映射的模块的一部分。理想情况下,我相信正确的地方是混凝土ClassMap实现,因为它确切地知道如何向 ORM 描述 POCO。

然而,我之所以坚持这一点,主要是因为这是我第一次接触 NHibernate 及其流畅的 API。到目前为止,我对它的功能和可扩展性印象非常好,我希望有一种方法可以实现我的需求,将映射相关的代码封装在相应的模块中。

这是我的配置,来自一个集中的地方:

List<Assembly> assemblies = GetModules().Select(x => x.GetType().Assembly).ToList();

ISessionFactory nhibernateSessionFactory = Fluently
    .Configure()
    .Mappings(m => assemblies.ForEach(asm => m.FluentMappings.AddFromAssembly(asm)))
    .Database(
        MsSqlConfiguration.MsSql2005
            .ShowSql()
            .ConnectionString(DatabaseConfig.Instance.ConnectionString))
    .ExposeConfiguration(c => new SchemaUpdate(c).Execute(true, true))
    .BuildSessionFactory();

我使用继承自的标准类映射ClassMap:

public class User
{
    public virtual int ID { get; set; }
    public virtual String Username { get; set; }
    public virtual String Password { get; set; }
    public virtual DateTime DateCreated { get; set; }
    public virtual DateTime DateModified { get; set; }

    // Must ignore
    public string ComputedProperty  { get { ... } }
}

public class UserMap : ClassMap<User>
{
    public UserMap()
    {
        Table("User");
        Id(x => x.ID).GeneratedBy.Identity();
        Map(m => m.Username).Not.Nullable().Length(255).UniqueKey("User_Username_Unique_Key");
        Map(m => m.Password).Not.Nullable().Length(255);
        Map(m => m.DateCreated).Not.Nullable();
        Map(m => m.DateModified).Not.Nullable();
    }
}

我知道这篇文章有点旧,但我还是发布了,因为我没有找到有关该主题的任何最新帖子。 我想最简单的方法应该是为我们不想保留到表中的每个属性添加一个属性。通过添加一个扩展来检查它是否具有例如。具有 [NoEntity] 属性。

/// <summary>
/// Tells a single Property to not be persisted to table.
/// </summary>
public class NoEntity : Attribute { }


    /// <summary>
/// Extension to ignore attributes
/// </summary>
public static class FluentIgnore
{
    /// <summary>
    /// Ignore a single property.
    /// Property marked with this attributes will no be persisted to table.
    /// </summary>
    /// <param name="p">IPropertyIgnorer</param>
    /// <param name="propertyType">The type to ignore.</param>
    /// <returns>The property to ignore.</returns>
    public static IPropertyIgnorer SkipProperty(this IPropertyIgnorer p, Type propertyType)
    {
        return p.IgnoreProperties(x => x.MemberInfo.GetCustomAttributes(propertyType, false).Length > 0);
    }
}

在流畅的配置设置中:

            return Fluently.Configure()
            .Database(DatabaseConfig)
            .Mappings(m => m.AutoMappings.Add(AutoMap.Assembly(typeof(IDependency).Assembly)
            .OverrideAll(p => {
                p.SkipProperty(typeof(NoEntity)); 
            }).Where(IsEntity)))
            .ExposeConfiguration(ValidateSchema)
            .ExposeConfiguration(BuildSchema)
            .BuildConfiguration();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Fluent NHibernate 使用 FluentMappings 忽略 ClassMap 内的属性 的相关文章

随机推荐

  • Selenium 找不到类型为 number 的字段

    我在让 Cucumber 使用 HTML5 查找字段时遇到问题type number 我不太喜欢它们在浏览器中的显示方式 但我有一些字段需要移动设备上的数字键盘 这似乎是最简单的获取方式 我正在使用 SimpleForm 来构建表单 当我设
  • 设置Android系统音量

    我正在编写一个处理以下内容的应用程序 静音 使手机音量静音 低 使手机音量比静音时高 1 个百分点 中 使手机音量中等 高 将手机音量调至最大 电话音量包括铃声 视频 音频 游戏音量等 我知道如何通过以下方式实现静音模式AudioManag
  • numpy.all 轴参数行为不当?

    我有一个以下数组 a np array 0 5 0 5 0 9 0 9 gt gt gt a shape Out 72 2 4 gt gt gt np all a axis 0 Out 69 array False True False T
  • 将多列中的值乘以一列中的值

    我有以下数据 ID lt c CB1 CB2 CB3 size lt c 10 40 4 Year 1 lt c 10 6 15 Year 2 lt c 12 7 20 Year 3 lt c 14 8 25 data lt data fr
  • 使用 Core Motion 从加速度计数据获取位移

    我正在开发一个增强现实应用程序 目前 想要在表面上显示一个简单的立方体 并且能够在空间中移动 旋转和位移 以从所有不同的角度查看立方体 校准相机的问题在这里不适用 因为我要求用户将 iPhone 放置在他想要放置立方体的表面上 然后按下按钮
  • SIGKILL 信号处理程序

    我需要在收到任何终止命令 如 SIGTERM 和 SIGKILL 时写入日志文件 我可以注册 SIGTERM 但如何处理 SIGKILL 信号 你不能 至少不能杀死进程 你什么can要做的就是安排父进程监视子进程的死亡 并采取相应的行动 任
  • Firebase 绑定未反映在角度视图中

    我从 Firebase 中的每个对象 picUrl 图片的 url 中提取一个值 并将其存储在作用域数组变量 scope bricks 中 如何使 scope bricks 每次使用新对象更新 Firebase 时更新 从而更新新的 pic
  • 透视 mysql 结果集并创建 html 表/矩阵

    我整晚都把头撞在墙上 但还没有解决方案 假设我有这样的 Mysql 表结构 ID name value year 1 Tom 15 2018 2 Tom 4 2019 3 Tom 6 2020 4 Kate 18 2018 5 Kate 2
  • 在 Ruby 1.9.2 中使用 SOAP 和其他标准库

    因此 我最近升级到 1 9 2 Ruby 一直使用 1 8 7 我想尝试一下 Rails 3 我遇到的最大问题是我的 SOAP require 语句都不起作用 我有这样的问题 require soap rpc driver require
  • 更新 pandas groupby().last() 的列值

    给定数据框 dfd pd DataFrame A 1 1 2 2 3 3 B 4 5 6 7 8 9 C a b c c d e 我可以使用以下方法找到每个 A 组的最后一个 C 值 dfd groupby A last C 但是 我想将
  • 复制初始化和直接初始化的混淆

    考虑简单的陈述 摘自在 C 中 复制初始化和直接初始化之间有区别吗 A c2 A 该语句对临时值进行值初始化 然后复制该值 值写入 c2 阅读 5 2 3 2 和 8 5 14 这当然需要一个 非显式复制构造函数 阅读 8 5 14 和 1
  • 协议和委托之间的区别?

    和有什么区别protocol and a delegate and 我们如何声明variables in a protocol class 一个协议 用 protocolObjective C 中的语法 用于声明类 采用 声明它将使用此协议
  • 如何在调试模式下刷新 fmt 输出?

    我正在尝试fmt我确实从下面的代码中得到了输出 include
  • 通过选择部分或全部字符生成所有排列的算法

    我需要通过选择一些元素来生成字符串的所有排列 就像如果我的字符串是 abc 输出将是 a b c ab ba ac ca bc cb abc acb bac bca cab cba 我想到了一个基本算法 其中我生成 abc 的所有可能组合
  • Typescript 不会复制 d.ts 文件来构建

    所以也许我很困惑 但我想如果我添加declaration true到我的 tsconfig json 我可以让它 tsc 复制我的 d ts文件 以及转译的代码和它的d ts files EG src lib types d ts foo
  • 使用 Mac 在服务器上运行 Python

    我正在尝试在这个地址运行我的 python 文件 http usersignup drawyourpets com 正如您所看到的 它显示了文件夹中的文件 但并未实际运行它们 EDIT 现在它只返回 500 错误 当我使用 Google A
  • OAuth2 - 检索 TOKEN 时 OPTIONS 请求的状态 401

    我们的堆栈使用 Backbone 作为客户端应用程序 使用 Spring Boot 作为 RESTful API 我们正在尝试使用 OAuth2 进行基本身份验证 并由用户提供用户名和密码 我们使用 Spring Security 进行身份
  • 在 ES6 中正确扩展数组/代理?

    目前正在尝试制作数组 对象的自定义实现 我想最终会非常相似 并且偶然发现了一个让我发疯的问题 正如您所看到的 b 只是一个 array 的实例 即使它是从自定义类 CachedArray 创建的 因此我的自定义函数 testPush 未定义
  • Rails SELECT 40001 SQL_NO_CACHE 从未知位置触发

    在 MySQL 数据库服务器中 我们有名为test 该架构具有名为users 桌子usersRails 应用程序未在任何地方使用 唯一的入口处users发现位于 schema rb 中 The users表存储了一些数据 并且数据由在其他服
  • Fluent NHibernate 使用 FluentMappings 忽略 ClassMap 内的属性

    我在我的项目中使用 NHibernate 3 1 和 Fluent NHibernate 作为 ORM 我需要有一个被 Fluent NHibernate 忽略的 POCO 属性 起初 我的帖子可能看起来与这个问题 但事实并非如此 我的复杂