FluentMigrator中等效的NotMapped和AsNoTracking



Fluent Migrator.Net ORM中的NotMapped属性和AsNoTracking方法的等价物是什么。我正在将我的一个使用EF6作为ORM的项目迁移到Fluent Migrator。我在谷歌上搜索了很多关于这方面的信息,但找不到任何有用的信息。

FluentMigrator是一个管理数据库架构的开源项目,声称是类似于Ruby on Rails Migrations的.Net实现,您应该在github上的问题或讨论论坛中发布问题和反馈,因为他们的社区在2020年仍然活跃。

因为Fluent Migrator本身不是ORM,它只管理数据模式,因此问题是格式不正确。

EF有自己的模式迁移管理,即Code First Migrations,它解释[NotMapped]以从数据库模式中省略字段,并在将查询结果映射到数据对象模型时忽略它。

从EF的项目转换通常是NHibernate或Dapper,对于这个响应,我将假设NHibernat,因为如果你仍在使用EF,问题就不存在,但如果你使用不同的ORM,希望思考过程能帮助你找到答案。

回复:NotMapped

如上所述,EF中的NotMapped属性由数据模式迁移ORM来解释。在Fluent Migrator的配置中,您可以手动指定要在数据模式中操作的字段,因此只需从创建/更改表语句中完全省略该字段即可。

如果要更改不再存储在数据库中的字段,则可以添加Delete.Column命令:

Delete.Column("ColumnName".FromTable("TableName").InSchema("dbo");

更新:Linq2Db解决方案:

使用NotColumn属性

NHibernate这样的ORM中也是如此,只是不要在映射配置中映射属性。

  • 当您使用NHibernate的自动映射扩展时,本文将介绍不同的解决方案

RE:AsNoTracking

如果您仍在使用EF6作为ORM,那么这一点不会改变,Fluent Migrator关于模式维护和操作,而不是数据查询。

EF查询中的AsNoTracking()禁用更改跟踪和缓存,并且作为一种副产品,允许查询在单个响应中返回具有重复键值的多个记录,OP不清楚使用了什么上下文AsNoTracking(),但重要的是要确定为什么要使用'min'

更新:linq2Db

据我所知,Linq2Db不跟踪更改,它的主要功能是将Linq查询转换为SQL并执行该SQL,即AsNoTracking具有缓存含义,因此我在Linq2Db中能找到的最接近的方法是使用NoLinqCache来创建一个不缓存执行的范围:

using (var db = new MyDataConnection())
using (NoLinqCache.Scope())
{
var query = db.Users.Where(x => Sql.Ext.In(x.Id, ids));
}

对于使用NHibernate的读者,您可以查阅只读实体文档
您可以使用将会话中的所有查询设置为只读

session.DefaultReadonly = true

或者,您可以将单个查询设置为只读:

query.SetReadonly(true);

最新更新