Переименование свойств сущностей SQL LINQ 2 с помощью частичных классов - PullRequest
1 голос
/ 12 апреля 2009

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

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

Ответы [ 2 ]

2 голосов
/ 12 апреля 2009

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

РЕДАКТИРОВАТЬ : Недостатком использования отдельного свойства в частичном классе является то, что LINQ не сможет использовать его при генерации запросов - по сути, вы будете вынуждены всегда получать сущности раньше Вы можете использовать связанные свойства объекта. Переименовывая, вы позволяете LINQ использовать связанные свойства при построении запроса, что может привести к более эффективному запросу. Например, если вы хотите получить объекты, у которых связанный объект имеет определенное значение свойства, использование атрибута украшенного объекта позволит LINQ сгенерировать SQL для извлечения только тех соответствующих значений из базы данных. При реализации наивного свойства (которое просто ссылается на базовое свойство отношения, фактически переименовывая его), вы будете вынуждены сначала получить все сущности, а затем выполнить фильтрацию в вашем приложении.

1 голос
/ 12 апреля 2009

Да, вы можете, но вы должны применить те же атрибуты, что и сгенерированное свойство 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();
        }
...