Таблица за проблемы с макетом иерархии в EF 4.1 с множеством нулевых дискриминаторов

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

Вопрос

У меня есть таблица с INT PK, одним не нулевым полем и двумя нулевыми струнными полями.

Когда я иду и создаю дизайн в стиле TPH в EF, я установил его таким образом:

Тип верхнего уровня имеет только PK, а не нулевое поле.

Первый уровень проверяет первое нулевое поле как дискриминатор. Не нулевой, полученный тип, абстрактный. Я сопоставляю поле соответственно.

Я делаю это снова для второго поля, снова карты, где не нулевой. Я установил nullable = false на полях I Карта.

<EntitySetMapping Name="Items">
        <EntityTypeMapping TypeName="IsTypeOf(Model1.Item)">
          <MappingFragment StoreEntitySet="Items">
            <ScalarProperty Name="ID" ColumnName="ID" />
            <ScalarProperty Name="OtherID" ColumnName="OtherID" />
          </MappingFragment>
        </EntityTypeMapping>
        <EntityTypeMapping TypeName="IsTypeOf(Model1.BothNullItem)">
          <MappingFragment StoreEntitySet="Items">
            <ScalarProperty Name="ID" ColumnName="ID" />
            <Condition ColumnName="FirstNullField" IsNull="true" />
            <Condition ColumnName="NullField2" IsNull="true" />
          </MappingFragment>
        </EntityTypeMapping>
        <EntityTypeMapping TypeName="IsTypeOf(Model1.FirstFieldNull)">
          <MappingFragment StoreEntitySet="Items">
            <ScalarProperty Name="ID" ColumnName="ID" />
            <ScalarProperty Name=FirstNullField" ColumnName="FirstNullField" />
            <Condition ColumnName="FirstNullField" IsNull="false" />
          </MappingFragment>
        </EntityTypeMapping>
        <EntityTypeMapping TypeName="IsTypeOf(Model1.NotNullSubItem1)">
          <MappingFragment StoreEntitySet="Items">
            <ScalarProperty Name="ID" ColumnName="ID" />
            <Condition ColumnName="NullField2" IsNull="true" />
          </MappingFragment>
        </EntityTypeMapping>
        <EntityTypeMapping TypeName="IsTypeOf(Model1.NotNullSubItem2)">
          <MappingFragment StoreEntitySet="Items">
            <ScalarProperty Name="ID" ColumnName="ID" />
             <ScalarProperty Name="NullField2" ColumnName="NullField2" />
             <Condition ColumnName="NullField2" IsNull="false" />
          </MappingFragment>
        </EntityTypeMapping>
</EntitySetMapping>

Я получаю «две сущности с разными ключами, нанесенные на карту в одном и том же ряду».

Я думаю, что это потому, что, возможно, первый атрибут «Не нулевой» не унаследован детьми.

Я создал третий тип, чтобы попытаться позаботиться о том, чтобы Nullfield1 был Null, а Nullfield2 не является нулевым (что не произойдет в моем DB, у меня есть ограничение), но даже если я добавил его. Анкет

Явное добавление не нулевого условия ни на одну из 2 детей, чтобы я отобразил столбец, который по -прежнему не работает, даже если я сопоставляю его с каким -то посторонним свойством.

Ни одна из комбинаций условий для «bothnullitem» также не работает.

Любые идеи?

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

Решение

Welp, я закончил тем, что отказался от попытки заставить колонки дискриминатора распространять наследство, поэтому я создал 3 просмотра, один верхний уровень, один для нулевого поля1, а не Null Field One, а затем на не нулевом поле, я делаю поле 2 дискриминатором колонка в EF. Это звучит как дерьмовый ответ на мою проблему, поэтому я хотел бы услышать от кого -то, кто знает, в чем дело. Бюлер?

Обновление: исправлено! Выходя из концепции горизонтального разделения в одной из статей, которые я нашел на MSDN (http://msdn.microsoft.com/en-us/library/cc716779.aspx)i и вручную добавил условия в MSL. Похоже, вы не можете выполнять эту работу автоматически от дизайнера. Для тех из вас, кто задается вопросом, откройте EDMX в редактировании XML, идите и посмотрите на элементы условий ваших отображений. Добавьте дополнительные условия, где это необходимо (по -видимому, условия не наследуют от родительских сущностей, поэтому вы должны вручную добавить их к детям) и компилировать!

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