2017-02-02 5 views
0

Microsoft.EntityFrameworkCore.DbContext (für Version 1.1.0) hat zwei Version von AddRange (und anderen ähnlichen Verfahren):EF Kern: AddRange (Liste) läuft falsch Überlastung

public virtual void AddRange([NotNullAttribute] IEnumerable<object> entities); 
public virtual void AddRange([NotNullAttribute] params object[] entities); 

Zweiter nur casts zu IEnumerable<object>.

Wenn ich schreiben:

IReadOnlyCollection<Entity> list = ... 
context.AddRange(list); 

zweite Überladung ausgeführt wird, und wirft Array von object zu IEnumarable<object>, wo einzelne Artikel IReadOnlyCollection<Entity> ist. Es geht dann zu StateManager über. GetOrCreateEntry wo es als Entität selbst behandelt wurde. Ich bin nicht sicher, ob dies wirklich nicht funktioniert, habe gerade meine Tests nicht bestanden, weil dieses Stück:

dbMock.Setup(x => x.AddRange(It.IsAny<object[]>())) 
       .Callback<object[]>(xs => 
       { 
        foreach (var entity in xs) // entity is IReadOnlyCollection<Entity> here 

Was ich falsch gemacht?

+0

Wenn ich schreibe das gleiche, mein Compiler (VS2015) wählt die erste (richtige) Überlastung. –

+0

Ich habe das gleiche Ergebnis wie @IvanStoev beim Testen von Überladungen in Nicht-Ef-Umgebung. – Smit

Antwort

0

können Sie werfen die Liste selbst zu einem IEnumerable<object>:

context.AddRange(list.Cast<object>()); 
Verwandte Themen