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);