powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Entity Framework - Как узнать метаданные связи?
3 сообщений из 3, страница 1 из 1
Entity Framework - Как узнать метаданные связи?
    #36303118
cha0ss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, в программе создал EDM-модель, вывел на форму инфу о Person и всех LandRentPretender (в DataGrid'е), которые завязаны на Person (по связи FK_LandRentPretender_Person).

Далее удаляю одного LandRentPretender'а и смотрю на изменения в нашем контексте (oc - наш контекст)

var ac = oc.ObjectStateManager.GetObjectStateEntries(System.Data.EntityState.Added | System.Data.EntityState.Deleted | System.Data.EntityState.Modified);

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
for (int i = 0; i < ac.Count(); i++)
{
     if (ac.ElementAt(i).IsRelationship)
     {
           //Если изменена связь

          //Получаем какие поля у таблиц связывает эта связь
          //???
          //ac.ElementAt(i).OriginalValues[0] - наш первый элемент в связи
          //ac.ElementAt(i).OriginalValues[1] - наш второй элемент в связи

     }
}

Собственно вопрос: Каким образом мне выдрать какие именно поля связывает эта связь?
...
Рейтинг: 0 / 0
Entity Framework - Как узнать метаданные связи?
    #36304096
cha0ss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Раскопал чуть глубже:

В SSDL-модели нашел свое св-во:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
        <Association Name="FK_LandRentPretender_Person">
          <End Role="Person" Type="EstateUOModel.Store.Person" Multiplicity="0..1" />
          <End Role="LandRentPretender" Type="EstateUOModel.Store.LandRentPretender" Multiplicity="*" />
          <ReferentialConstraint>
            <Principal Role="Person">
              <PropertyRef Name="OID" />
            </Principal>
            <Dependent Role="LandRentPretender">
              <PropertyRef Name="SubjectPerson" />
            </Dependent>
          </ReferentialConstraint>
        </Association>

нашел св-во ReferentialConstraints , но количество элементов в нем = 0. Может я не на то вылез?

Копаю сюда:
Код: plaintext
1.
2.
System.Data.Metadata.Edm.AssociationSet as2 = (System.Data.Metadata.Edm.AssociationSet)ac.ElementAt(i).EntitySet;

as2.ElementType.ReferentialConstraints
...
Рейтинг: 0 / 0
Entity Framework - Как узнать метаданные связи?
    #36309746
cha0ss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решение моей проблемы:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
System.Data.Metadata.Edm.AssociationSet at = (System.Data.Metadata.Edm.AssociationSet)ac.ElementAt(i).EntitySet;
var astype = oc.MetadataWorkspace.GetItems<System.Data.Metadata.Edm.AssociationType>(System.Data.Metadata.Edm.DataSpace.SSpace)
.Where(elem => elem.Name == at.ElementType.Name).First();

string From_Role = astype.ReferentialConstraints[0].FromRole.Name;
string From_Field = astype.ReferentialConstraints[0].FromProperties.First().Name;
string To_Role = astype.ReferentialConstraints[0].ToRole.Name;
string To_Field = astype.ReferentialConstraints[0].ToProperties.First().Name;

Так как соединение полей хранится в SSDL модели, то в предыдущем примере ReferentialConstraints было пусто, нужно было просто выдрать метаданные из SSDL модели.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Entity Framework - Как узнать метаданные связи?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]