在运行时为 linq2db 添加或删除列映射

Add or remove column mapping at runtime for linq2db

我有一个场景,如果部署了某些功能,那么一些表中将有许多列,否则不会存在,因此实体和列的映射不是静态的。我需要在运行时 add/remove 映射。有什么办法吗?

准备一个新的 MappingSchema 并传递给 DataConnection 构造函数。

假设您有以下 class:

[Table]
class SampleClass
{
    [Column] public int Id    { get; set; }
    [Column] public int Value { get; set; }
}

要从完整对象具体化中删除列,请执行以下操作:

var ms = new MappingSchema();

ms.GetFluentMappingBuilder()
    .Entity<SampleClass>().Property(e => e.Value).IsNotColumn();

// cache somewhere this schema

using (var db = new DataConnection(ms))
{
    var result = db.GetTable<SampleClass>().ToArray();
}

记住,最好缓存这个新的 MappingSchema 并重复使用。否则你将永远不会命中缓存并且你会失去性能。