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?
Wenn ich schreibe das gleiche, mein Compiler (VS2015) wählt die erste (richtige) Überlastung. –
Ich habe das gleiche Ergebnis wie @IvanStoev beim Testen von Überladungen in Nicht-Ef-Umgebung. – Smit