我有一个应该将数据从一个数据库实体复制到另一个数据库实体的过程。因此,我在 C#中使用 Entity Framework 6 和 LINQ 表达式:
public partial class ReferenceEntities : DbContext {
public Nullable<System.DateTime> ActivationDate { get; set; }
public string Code { get; set; }
}
this.ReferenceEntities.ReferenceEntity.AsEnumerable().Select(referenceEntry => new StagingReferenceLoader() {
ActivationDate = referenceEntry.ActivationDate,
Code = referenceEntry.Code?.TrimStart('0').Trim()
});
this.ProcessingEntities.StagingReferenceLoader.AddRange(stagingEntries);
this.ProcessingEntities.SaveChanges();
Code
是受此流程影响的两个实体中的char(11)
列。
示例:
在 StagingReferenceLoader 中,Code
值如下所示:00000253089
使用修剪操作,我想让它看起来像这样:253089
。当我执行它时,第一种方式看起来很好。
但是如果我直接在数据库上运行这个SQL查询,它会得到如下结果:
SELECT DATALENGTH(code), len(code), code
FROM staging.ReferenceLoader
datalength | len | code
11 | 6 | 253177
11 | 6 | 270724
为什么Entity Framework不执行 trim 操作?
答案 0 :(得分:2)
Code字段的类型必须是varchar(11),因为char(11)具有固定长度。 DB因此将始终填充到全长。请将其更改为varchar。