Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, Plotyan, Вы писали:
P>>Можно ли задать параметры ассоциаций и наследования через XML схему маппинга?
AVK>Да.
Здравствуйте, Plotyan, Вы писали:
P>Где-нибудь можно почитать о том, как это сделать?
Наверно можно создать собственного наследника класса BLToolkit.Reflection.MetadataProvider.MetadataProviderBase (например по аналогии с LinqMetadataProvider) и там уже брать параметры маппинга и конфигурации откуда захочется и как захочется.
Здравствуйте, Plotyan, Вы писали:
IT>>должен вернуть объекты не родительского типа, а наследников.
P>Хм, тут не понял. Если Product — это базовый класс, то тут два варианта: P> 1. запрос возвращает все записи, включая всех наследников, в виде Product. P> 2. запрос возвращает только объекты класса Product, без наследников.
P>В первом случае все хорошо, а во втором да, нужно знать обо всех наследниках, чтобы их не выбрать. Но вроде первый вариант более логичен?
Запрос должен вернуть объекты, типы которых соответствуют описании иерархии. Но в данном случае это описание можно взять только у Product, больше негде.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
IT>Запрос должен вернуть объекты, типы которых соответствуют описании иерархии. Но в данном случае это описание можно взять только у Product, больше негде.
так вопрос скорее в том как узнавать.
отчего бы не вынести данное узнавание в метадата провайдер, в таком случае, кому надо, тот сможет припаивать свой код на этот предмет.
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, Plotyan, Вы писали:
P>>Можно ли задать параметры ассоциаций и наследования через XML схему маппинга?
IT>В смысле задать атрибуты? По-моему, пока нет. Тем не менее, задавать поля/свойсва для ассоциаций всё равно придётся.
Я имел в виду определение маппинга через XML. BLToolkit вроде поддерживает не только атрибуты, но и XML, но здесь
Здравствуйте, IT, Вы писали:
IT>А как такое описание и такой запрос будет выглядеть в коде?
Вот например с базой Northwind. Есть там такие таблицы для связи many-to-many: "Employees" <- "EmployeeTerritories" -> "Territories".
Сейчас соответсвующие им классы в bltoolkit выглядят так (взял из unit-тестов):
[TableName("Employees")]
public class Employee
{
[PrimaryKey, NonUpdatable]
public int EmployeeID;
[Association(ThisKey="EmployeeID", OtherKey="EmployeeID")]
public List<EmployeeTerritory> EmployeeTerritories;
}
[TableName("EmployeeTerritories")]
public class EmployeeTerritory
{
[PrimaryKey]
public int EmployeeID;
[PrimaryKey, NotNull]
public string TerritoryID;
[Association(ThisKey="EmployeeID", OtherKey="EmployeeID")] public Employee Employee;
[Association(ThisKey="TerritoryID", OtherKey="TerritoryID")] public Territory Territory;
}
[TableName("Territories")]
public class Territory
{
[PrimaryKey, NotNull]
public string TerritoryID;
[Association(ThisKey="TerritoryID", OtherKey="TerritoryID")]
public List<EmployeeTerritory> EmployeeTerritories;
}
Таблица EmployeeTerritories в базе нужна — это понятно, но вот соответсвующий класс EmployeeTerritory, как мне кажется, выглядит несколько излишним.
Скажем в Entity Framework и в NHibernate есть нативная поддержка таких ассоциаций. Для них соответсвующие классы будут выглядеть как-то так (шаблонно):
public class Employee
{
public int EmployeeID;
public List<Territory> Territories;
}
public class Territory
{
public string TerritoryID;
public List<Employee> Employees;
}
Здесь коллекция Employee.Territories — это список самих территорий, с которыми связян данный сотрудник. А Territory.Employees — список всех сотрудников на данной территории. Промежуточного класса для их связи здесь нет (хотя конечно сама таблица связи где-то в настройках/конфигурации упоминается).
Наверно для bltoolkit можно реализовать нечто подобное, например, введя еще один атрибут ассоциации для связей many-to-many как-то так:
public class Employee
{
public int EmployeeID;
[ManyToManyAssociation(TableName="EmployeeTerritories", ThisKey="EmployeeID", OtherKey="TerritoryID")]
public List<Territory> Territories;
}
public class Territory
{
public string TerritoryID;
[ManyToManyAssociation(TableName="EmployeeTerritories", ThisKey="TerritoryID", OtherKey="EmployeeID")]
public List<Employee> Employees;
}
Linq-запросы к таким таблицам с использованием ассоциаций по идее должны остаться как и прежде. Только в случае если при разборе ET встречается упоминание такого вот свойства с соотвтевующей many-to-many-ассоциацией, то нужно будет генерировать еще один неявный джойн с неявно упоминаемой промежуточной таблицей (EmployeeTerritories).
Несколько сложнее будет придумать элегантное решение для создания/удаления связей между такими сущностями — просто из кода вставлять/удалять классы EmployeeTerritory в базу уже не получится (heavy-ORM здесь так или иначе используют паттерн unit-of-work).
Зачем все это надо? Ну лично мне было бы проще интегрировать bltoolkit в уже существующие приложения, или сочетать в одном приложении как bltoolkit, так и другие средства для работы с базой, или переходить с/на bltoolkit более "плавно".
Здравствуйте, ili, Вы писали:
ili>отчего бы не вынести данное узнавание в метадата провайдер, в таком случае, кому надо, тот сможет припаивать свой код на этот предмет.
А оно разве сейчас не там?
... << RSDN@Home 1.2.0 alpha 4 rev. 1464 on Windows 7 6.1.7600.0>>
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, ili, Вы писали:
ili>>отчего бы не вынести данное узнавание в метадата провайдер, в таком случае, кому надо, тот сможет припаивать свой код на этот предмет.
AVK>А оно разве сейчас не там?
а, блин... кажись я ослеп GetInheritanceMapping я не увидел, только GetInheritanceDiscriminator заметил, ща перепроверил и нашел...
Здравствуйте, Овощ, Вы писали:
О>Зачем все это надо? Ну лично мне было бы проще интегрировать bltoolkit в уже существующие приложения, или сочетать в одном приложении как bltoolkit, так и другие средства для работы с базой, или переходить с/на bltoolkit более "плавно".
А если описание промежуточных сущностей всё же требовать, но иметь возможность обходится без них в запросе?
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, Димчанский, Вы писали:
Д>Что-то в последнее время у меня сайт bltoolkit.net загружается на 10-ый раз с дичайшими задержками и не полностью. Это у меня одного так?
Я туда взгромоздил ScrewTuen Wiki, может быть по-этому.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, Димчанский, Вы писали:
IT>>Я туда взгромоздил ScrewTuen Wiki, может быть по-этому. Д>Ну вобщем ни побраузить, ни скачать что-либо не могу.
Здравствуйте, Димчанский, Вы писали:
IT>>Я туда взгромоздил ScrewTuen Wiki, может быть по-этому. Д>Ну вобщем ни побраузить, ни скачать что-либо не могу.
Хотя, похоже хостер тормозит. В общем, надо переезжать.
Если нам не помогут, то мы тоже никого не пощадим.