2017-03-13 9 views
3

Ich habe einen Prozess, der Daten von einer Datenbank-Entität in eine andere kopieren sollte. Deshalb verwende ich Entity Framework 6 und LINQ Ausdrücke in C#:Entity Framework 6: Trimmen funktioniert nicht richtig

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 ist char(11) Spalte in beiden Entitäten, die von diesem Prozess betroffen sind.

Beispiel: 00000253089

Mit den Trim Operationen ich es so aussehen zu wollen:

In StagingReferenceLoader der Code Wert wie folgt aussieht 253089. Das sieht auf Anhieb gut aus, wenn ich es ausgeführt habe. Aber wenn ich diese SQL-Abfrage auf der Datenbank lief gibt es direkt mein das Ergebnis wie folgt:

SELECT DATALENGTH(code), len(code), code 
FROM staging.ReferenceLoader 

datalength | len | code 
11   | 6 | 253177  
11   | 6 | 270724  

Warum tut nur Entity Framework nicht die Betrieb trimmen?

+4

Können Sie [Code] in ein varchar (11) ändern? Ich denke, das Problem ist, dass char (11) immer eine feste Länge hat. –

+0

Ich werde es versuchen. Danke – rbr94

+0

@ CarlosAdrián Es funktioniert. Vielen Dank – rbr94

Antwort

2

Der Typ des Code-Felds muss varchar (11) sein, da char (11) eine feste Länge hat. Die DB wird also immer die volle Länge ausfüllen. Bitte ändere es in varchar.