LINQ к SQL несколько DataContext-s

Если вы хотите быть уверены, что код анализирует строку только за один проход, и анализирует только то, что нужно, вы можете написать процедуру, которая перебирает строку самостоятельно.

Поскольку все строки c # реализуют IEnumerable, довольно просто разработать метод, который требует нулевого выделения строк:

static public IEnumerable GetDelimitedField(this IEnumerable source, char delimiter, int index)
{
    foreach (var c in source)
    {
        if (c == delimiter) 
        {
            if (--index < 0) yield break;
        }
        else
        {
            if (index == 0) yield return c;
        }
    }
}

Возвращает результат как IEnumerable, но его дешево преобразовать в строка. В любом случае это будет намного более короткая строка.

static public string GetDelimitedString(this string source, char delimiter, int index)
{
    var result = source.GetDelimitedField(delimiter, index);
    return new string(result.ToArray());
}

И вы можете назвать это так:

var input ="Zero,One,Two,Three,Four,Five,Six";
var output = input.GetDelimitedString(',',5);
Console.WriteLine(output);

Вывод:

Five

Пример на DotNetFiddle

11
задан Albert 24 October 2008 в 15:14
поделиться

4 ответа

Отображения LINQ-SQL как введенный DataSets, в том, что, когда Вы используете один, Вы имеете дело с сессией, содержащей данные. У Вас могут быть те же таблицы в нескольких различных DataContexts. Они - только классы, в конце концов; они ничего не имеют в виду, пока Вы не начинаете взаимодействовать с базой данных путем заполнения их существующими данными или использования их для создания новых данных.

Таким образом, возможно, у Вас есть Клиент, Адрес, Телефон, и т.д. таблицы, что Вы имеете дело с тем, когда Вы отсылаете новый каталог. Затем у Вас есть Счет, Позиция, продукт, и т.д. таблицы, которые Вы используете при создании порядка. Но в том последнем наборе можно хотеть иметь Клиента также. Это прекрасно. Необходимо просто заботиться, чтобы только иметь одну сессию, активную за один раз так, чтобы Вы не использовали непоследовательные данные. У Вас не должно быть проблем от перекрывающихся объектов в Вашем различном DataContexts, пока Вы не используете их перекрывающимся способом.

До помехи можно поместить DataContext в определенное пространство имен, и можно также поместить различные объекты в определенное пространство имен (хотя только одно пространство имен на набор объектов в DataContext). Можно сделать это в Окне свойств. Это позволит Вам сохранить Intellisense менее смешанным.

2
ответ дан 3 December 2019 в 11:21
поделиться

Необходимо создать контексты, которые позволяют Вам выполнять единицы работы. Это может включить перекрывающиеся отображения таблицы.

Context1: у Клиента есть много Счетов

Context2: у Клиента есть много Заказов

Context3: Счет имеет много Заказов

0
ответ дан 3 December 2019 в 11:21
поделиться

Я использую один datacontext на базу данных.

Средние таблицы могут быть до 100, однако по опыту я не Не возникает проблем с производительностью.

Текст данных находится в отдельном проекте, который компилируется. На результирующую dll ссылаются из BLL

0
ответ дан 3 December 2019 в 11:21
поделиться

Это распространенный вопрос, который был подробно разобран здесь: http://craftycode.wordpress.com/2010/07/19/linq-to-sql-single-data-context-or-multiple/

По сути, вы должны создавать не более одного контекста данных на сильно связанную группу таблиц, или один контекст данных на базу данных.

4
ответ дан 3 December 2019 в 11:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: