C# - Список <T>.Remove () всегда удаляет первый объект в списке

На очень высоком уровне: ORMs помогают уменьшить Объектно-реляционное несоответствие импеданса. Они позволяют Вам хранить и получать полные живые объекты от реляционной базы данных, не делая большого парсинга/сериализации самим.

, Что это дает мне как разработчика?

Для начинающих это помогает Вам остаться DRY. Или Вы схема или Вы моделируете, классы являются авторитетными, и другой автоматически сгенерирован, который сокращает количество ошибок и сумму шаблонного кода.

Это помогает с маршалингом. ORMs обычно обрабатывают маршалинг значений отдельных столбцов в соответствующие типы так, чтобы Вы не анализировали/сериализировали их сами. Кроме того, это позволяет Вам получать полностью сформированный объект от DB, а не просто объектов строки, что необходимо обернуть Ваш сам.

, Как мой код будет отличаться от отдельных операторов SELECT, которые я использую теперь?

, Так как Ваши запросы будут эхо-сигналы скорее тогда просто строки, Вы будете в состоянии к связанным с доступом объектам с помощью доступа атрибута вместо того, чтобы создать новый запрос. Вы обычно в состоянии записать SQL непосредственно, когда Вы должны, но для большинства операций (CRUD) ORM сделает код для взаимодействия с постоянными объектами более простым.

, Как это поможет с доступом DB и безопасностью?

Вообще говоря, ORMs имеют свой собственный API для создания запросов (например, припишите доступ), и так менее уязвимы для атак с использованием кода на SQL; однако, они часто позволяют Вам вводить свой собственный SQL в сгенерированные запросы так, чтобы можно было сделать странные вещи, если Вы должны. Такой введенный SQL Вы ответственны за очистку себя, но, если Вы избегаете использования таких функций тогда, ORM должен заботиться об очистке пользовательских данных автоматически.

, Как это узнает о схеме DB и удостоверениях пользователя?

Много ORMs идут с инструментами, которые осмотрят схему и создадут ряд образцовых классов, которые позволяют Вам взаимодействовать с объектами в базе данных. [База данных] удостоверения пользователя обычно хранится в файле настроек.

5
задан Rex M 16 September 2009 в 19:09
поделиться

4 ответа

You can override object.GetHashCode and object.Equals:

public override bool Equals(object obj)
{
    if(obj == null)
    {
        return false;
    }
    return Equals(this, obj as Shift);
}

public override int GetHashCode()
{
    return this.GetHashCode(this);
}

You should also probably do a null check in Equals(x, y).

10
ответ дан 18 December 2019 в 13:16
поделиться

Remove uses EqualityComparer.Default to determine equality and choose which object to remove, which will use IEquatable if it's implemented on your object, otherwise, it will use reference equality.

You have two options to get the behavior you want:

1) Make Shift implement IEquatable (not just override Object.Equals or make the method, but make Shift - Shift : IEquatable)

2) Use List.RemoveAt

0
ответ дан 18 December 2019 в 13:16
поделиться

With the example you provided, you're calling:

List<Shift>.Remove("12:00 - 16:00");

"12:00 - 16:00" in this case, is a String value and not an actual Shift object. Make sure that in your CompareTo method that you're code is properly casting the String value to a Shift object. Otherwise, when it compares start times...things could go haywire.

0
ответ дан 18 December 2019 в 13:16
поделиться

IComparable обычно не используется для сравнения на равенство (он используется для упорядочивания), поэтому List .Remove () игнорирует его.

IEqualityComparer не является эквивалент IComparable для целей равенства. Предполагается, что это будет реализовано с помощью объекта сравнения , то есть объекта, который сравнивает другие объекты на равенство. Если вы хотите, чтобы сравнения на равенство были присущи вашему классу, вам лучше реализовать IEquatable . Или просто переопределите Object.Equals () и Object.GetHashCode () в своем классе без реализации каких-либо интерфейсов.

4
ответ дан 18 December 2019 в 13:16
поделиться
Другие вопросы по тегам:

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