Это очень возможно и быстрее (при правильном использовании, об этом позже)
И вот как вы можете это сделать:
var context1 = new DbContext();
_fooList = new List<Foo>
{
// Thousands of datasets
}
context1.Set<Foo>().AddRange(_fooList);
var context2 = new DbContext();
_barList = new List<Bar>
{
// Thousands of datasets
}
context2.Set<Bar>().AddRange(_barList);
var fooTask = context1.SaveChangesAsync();
var barTask = context2.SaveChangesAsync();
await Task.WhenAll(new Task[] {fooTask, barTask});
Это быстрее, чем иметь один Запись контекста в одну таблицу, а затем в следующую, но если вы делаете это для той же таблицы, это может быть на самом деле медленнее, чем делать это с 1 Context
Не встроенный, но это довольно легко записать. Я, вероятно, реализовал бы IDictionary для этого хотя... Вы затем вывели бы ResourceDictionary в свой пользовательский тип.
public class DoubleLookup<TKey, TValue>
{
private IDictionary<TKey, TValue> keys;
private IDictionary<TValue, TKey> values;
//stuff...
public void Add(TKey key, TValue value)
{
this.keys.Add(key, value);
this.values.Add(value, key);
}
public TKey GetKeyFromValue(TValue value)
{
return this.values[value];
}
public TValue GetValueFromKey(TKey key)
{
return this.keys[key];
}
}
Будьте очень осторожны при инвертировании отношений ключа/значения в словаре.
Контракт словаря гарантирует, что для каждого значения в наборе существует точно один ключ, который отображается на то значение. Ключи уникальны. Но реверс не верен; для каждого отличного значения может быть много различных ключей, отображающихся на то значение.
В моей собственной персональной библиотеке кода (записанный в Java, который достаточно близок), у меня есть Мультикласс сопоставления для просто такого рода вещи. Хотя ключи уникальны, каждый ключ может быть связан с несколькими значениями. Это точно идентично Карте>.
Когда я должен выполнить поиски значения к ключу в наборе, я делаю что-то вроде этого:
Map<K, V> lookupTable = ...;
MultiMap<V, K> reverseLookupTable = MapUtil.invert(lookupTable);
V value = ...;
if (reverseLookupTable.containsKey(value)) {
Set<K> keys = reverseLookupTable.get(value);
}
При использовании чего-то другого, чем MultiMap (как HashMap или Словарь) как обратная справочная таблица Вы рискуете терять некоторые свои V-> K отображения, если Вы не можете гарантировать, что все ключи И все значения в Вашем наборе уникальны.
Править:
Ой. Я просто заметил, что Вы сказали, что все ключи и значения в Вашем наборе уникальны. Но я оставлю свой ответ здесь во всяком случае как предупреждение для других, читающих это, кто не смог обеспечивать ту же гарантию.