Переименование свойств сущности LINQ 2 SQL С помощью частичных классов

StackOverflow https://stackoverflow.com/questions/741898

  •  09-09-2019
  •  | 
  •  

Вопрос

Могу ли я использовать частичные классы для создания свойств, указывающих на свойство ассоциации, сгенерированное дизайнером L2S.Кроме того, смогу ли я использовать новое свойство в запросах?

Как я могу этого добиться?

Это было полезно?

Решение

Да, вы можете, но вы должны применить те же атрибуты, что и свойство, сгенерированное linq2sql, т.е.

    [Association(Name="Test_TestData", Storage="_TestDatas", ThisKey="SomeId", OtherKey="OtherId")]
    public System.Data.Linq.EntitySet<TestData> MyTestDatas
    {
        get
        {
            return this.TestDatas;
        }
    }

TestDatas - это исходное отношение.

Обновить: Пример запроса, который я запустил:

        var context = new DataClasses1DataContext();
        var tests =
            from d in context.Tests
            where d.MyTestDatas.Any(md=>md.MyId == 2)
            select new
            {
                SomeId = d.SomeId,
                SomeData = d.SomeData,
                Tests = d.MyTestDatas
            };
        foreach (var test in tests)
        {
            var data = test.Tests.ToList();
        }

Другие советы

Если вы просто хотите присвоить другое имя свойству ассоциации, просто используйте страницу свойств для ассоциации и переименуйте родительское и / или дочернее свойство.Это изменит имя EntityRef /EntitySet в классе.

Редактировать:Недостатком использования отдельного свойства в частичном классе является то, что LINQ не сможет использовать его при генерации запросов - по сути, вы будете вынуждены всегда получать сущности, прежде чем сможете использовать связанные свойства объекта.Переименовывая, вы позволяете LINQ использовать связанные свойства при построении запроса, что может привести к более эффективному запросу.Например, если вы хотите получить объекты, в которых связанный объект имеет определенное значение свойства, использование объекта, оформленного атрибутом, позволит LINQ сгенерировать SQL для извлечения только этих совпадающих значений из базы данных.С наивной реализацией свойства (которая просто ссылается на базовое свойство relation, фактически переименовывая его) вы будете вынуждены сначала получить все объекты, а затем выполнить фильтрацию в вашем приложении.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top