Можно ли использовать SourceCache для сущностей, которые имеют составной первичный ключ? - PullRequest
0 голосов
/ 16 января 2020

Я работаю с базой данных Northwind. Также я работаю с данными ReactiveUI и Dynami c, поэтому я использую SourceCache для работы с коллекцией записей.

В случае, если первичный ключ entite состоит из одного поля, я могу легко использовать SourceCache, например, позволяет создать SourceCache для Employee сущности:

employeesList = new SourceCache<Employee, int>(a => a.EmployeeID);

Но я не могу использовать SourceCache для Order_Details сущностей, поскольку у этой сущности есть составной первичный ключ.

Можно ли создать SourceCache объекта, который имеет составной первичный ключ?

1 Ответ

0 голосов
/ 16 января 2020

DynamicData использует EqualityComparer<TKey>.Default, чтобы проверить, равны ли два элемента друг другу. Вы можете реализовать свой собственный IEqualityComparer<TKey> в своем классе составного первичного ключа, чтобы указать, что означает равенство для вашего составного ключа.

public class MyCompoundKey : IEqualityComparer<MyCompoundKey>
{
    public bool Equals(MyCompoundKey b1, MyCompoundKey b2)
    {
        if (b2 == null && b1 == null)
           return true;
        else if (b1 == null || b2 == null)
           return false;
        else if(b1.Height == b2.Height && b1.Length == b2.Length
                            && b1.Width == b2.Width)
            return true;
        else
            return false;
    }

    public int GetHashCode(MyCompoundKey bx)
    {
        int hCode = bx.Height ^ bx.Length ^ bx.Width;
        return hCode.GetHashCode();
    }

    public int Height { get; set; }
    public int Length { get; set; }
    public int Width { get; set; }

    public string Name { get; set; }
}

В приведенном выше примере он игнорирует имя в проверке равенства.

...