Будет ли EF7 поддерживать инициализаторы коллекций?

C# 6 представил несколько интересных дополнений к тому, как инициализируются объекты и коллекции.

Например, этот код действителен в C#6:

void Main()
{
    var ints = new[] { 1, 2, 3, 4, 5 };
    var myClass = new MyClass
    {
        // IEnumerableExtensions.Add<T> is called.
        Items = { ints } 
    };

    Console.WriteLine(myClass.Items.Count());
}

class MyClass
{
    public ICollection<int> Items { get;} = new List<int>();    
}

public static class IEnumerableExtensions
{
    public static void Add<T>(this ICollection<T> collection, IEnumerable<T> items)
    {
        var list = collection as List<T>;
        if (list != null)
        {
            list.AddRange(items);
            return;
        }

        foreach (var item in items)
        {
            collection.Add(item);
        }       
    }
}

Так что теперь можно написать выражение инициализации для объектов со свойствами коллекции только для чтения.

И иногда мне нужно рассказать EF, как собрать сущность:

from name in names
join addr in infoSecEmailAddresses
    on name.LegalEntityIsn equals addr.LegalEntityIsn into addresses
where legalEntityIsns.Contains(name.LegalEntityIsn)
select new LegalEntitySideInfoSecParameters
{
    LegalEntityIsn = name.LegalEntityIsn,
    LegalEntityName = name.FullNameNominative,
    Emails =  addresses.Select(
        a => new Email
        {
            EmailAddress = a.Address,
            RecipientPriority = a.RecipientPriority
        }).ToList()
}

Вот Emails собственность должна быть доступной для записи. Но с верхним кодом можно было бы сделать его доступным только для чтения и переписать код следующим образом:

Emails =  {
    addresses.Select(
        a => new Email
        {
            EmailAddress = a.Address,
            RecipientPriority = a.RecipientPriority
        })
}

На самом деле это можно сделать, введя DTO с анонимным типом, позже преобразованным на клиенте (AsEnumerable()) к необходимому лицу. Тем не менее, я бы хотел, чтобы эта функция поддерживалась самой EF7.

0 ответов

Другие вопросы по тегам