EF 4.1 Проблемы при TPT-наследовании
От: grayver  
Дата: 14.11.11 11:58
Оценка:
Добрый день!
В БД (MS SQL 2008 R2) имеется некий "интерфейсный" слой — набор вьюшек и хранимых процедур, к которым имеет доступ наше приложение. В нашем приложении мы строим модель на базе EF 4.1, которая использует вьюхи из БД. В этой модели есть 2 сущности, для которых реализовано наследование — базовая сущность Tag и дочерняя сущность FinancialGoal. На реляционном уровне — это 2 таблицы с отношением 1 к 1, на уровне вьюх также используется общий ключ TtrId. Согласно инструкциям от MS мы создали одну сущность на базе вьюхи vwTags, потом создали наследуемую сущность на базе второй вьюхи vwGoals, удалили из набора полей сущности FinancialGoal поле TtrId и поставили в маппинге сущности FinancialGoal ключ TtrId базовой сущности Tag. Далее мы замапили соответствующие процедуры на вставку\обновление\удаление сущностей Tag и FinancialGoal. При этом сущность Tag НЕ является абстрактной и весьма автономна. Как родительская, так и дочерняя сущность имеют связи с другими сущностями модели. Поле TtrId у сущности Tag имеет свойство StoreGeneratedPattern=Identity. Все работает хорошо за исключением момента, когда мы пытаемся добавить сущность FinancialGoal. В этом случае возникает ошибка "A dependent property in a ReferentialConstraint is mapped to a store-generated column. Column: 'TtrId'.". Текст ошибки понятен — нам говорят о том, что в ссылочной зависимости внешний ключ является "store-generated column" и им является поле TtrId. Проблема в том, что нигде в модели нет этого внешнего ключа TtrId со свойством "store-generated column". В сущности Tag поле TtrId обладает таким свойством, но оно есть primary key и не является foreign key ни для одной из сущностей. Многочасовое ковыряние в edmx-е результатов не дало.. гугление тоже Есть подозрение, что ошибка возникает из-за каких-то особенностей реализации наследования в EF.. Но это только подозрение.

Заранее спасибо за помощь.
Re: EF 4.1 Проблемы при TPT-наследовании
От: pgatilov  
Дата: 15.11.11 10:26
Оценка:
Здравствуйте, grayver, Вы писали:

G>Добрый день!

G>В БД (MS SQL 2008 R2) имеется некий "интерфейсный" слой — набор вьюшек и хранимых процедур, к которым имеет доступ наше приложение. В нашем приложении мы строим модель на базе EF 4.1, которая использует вьюхи из БД. В этой модели есть 2 сущности, для которых реализовано наследование — базовая сущность Tag и дочерняя сущность FinancialGoal. На реляционном уровне — это 2 таблицы с отношением 1 к 1, на уровне вьюх также используется общий ключ TtrId. Согласно инструкциям от MS мы создали одну сущность на базе вьюхи vwTags, потом создали наследуемую сущность на базе второй вьюхи vwGoals, удалили из набора полей сущности FinancialGoal поле TtrId и поставили в маппинге сущности FinancialGoal ключ TtrId базовой сущности Tag. Далее мы замапили соответствующие процедуры на вставку\обновление\удаление сущностей Tag и FinancialGoal. При этом сущность Tag НЕ является абстрактной и весьма автономна. Как родительская, так и дочерняя сущность имеют связи с другими сущностями модели. Поле TtrId у сущности Tag имеет свойство StoreGeneratedPattern=Identity. Все работает хорошо за исключением момента, когда мы пытаемся добавить сущность FinancialGoal. В этом случае возникает ошибка "A dependent property in a ReferentialConstraint is mapped to a store-generated column. Column: 'TtrId'.". Текст ошибки понятен — нам говорят о том, что в ссылочной зависимости внешний ключ является "store-generated column" и им является поле TtrId. Проблема в том, что нигде в модели нет этого внешнего ключа TtrId со свойством "store-generated column". В сущности Tag поле TtrId обладает таким свойством, но оно есть primary key и не является foreign key ни для одной из сущностей. Многочасовое ковыряние в edmx-е результатов не дало.. гугление тоже Есть подозрение, что ошибка возникает из-за каких-то особенностей реализации наследования в EF.. Но это только подозрение.
G>
G>Заранее спасибо за помощь.

Во-первых, раз уж у Вас есть edmx, то это никакой ни EF 4.1, а обычный EF 4 (В EF 4.1 aka Code First edmx вообще не заводится).

Теперь про FK: у Вас же явно стоит ключ с Tag на Tag (NavParentTag). Возможно, там какой-то глюк залез.

Судя по тому, что пишут в интернете по этому сообщению, у Вас таки где-то ошибка в edmx. Как я понял, суть ошибки в том, что в edmx объявлено свойство, которое является ссылкой (т.е. зависимо), а мапится оно почему-то на Identity колонку, что, конечно, является ошибкой.

Рекомендую Вам продолжить подробное изучение edmx с поиском по ключевому слову "TtrId", либо "edmx в студию".
Re[2]: EF 4.1 Проблемы при TPT-наследовании
От: grayver  
Дата: 16.11.11 11:09
Оценка:
Здравствуйте, pgatilov, Вы писали:

P>Здравствуйте, grayver, Вы писали:


G>>Добрый день!

G>>В БД (MS SQL 2008 R2) имеется некий "интерфейсный" слой — набор вьюшек и хранимых процедур, к которым имеет доступ наше приложение. В нашем приложении мы строим модель на базе EF 4.1, которая использует вьюхи из БД. В этой модели есть 2 сущности, для которых реализовано наследование — базовая сущность Tag и дочерняя сущность FinancialGoal. На реляционном уровне — это 2 таблицы с отношением 1 к 1, на уровне вьюх также используется общий ключ TtrId. Согласно инструкциям от MS мы создали одну сущность на базе вьюхи vwTags, потом создали наследуемую сущность на базе второй вьюхи vwGoals, удалили из набора полей сущности FinancialGoal поле TtrId и поставили в маппинге сущности FinancialGoal ключ TtrId базовой сущности Tag. Далее мы замапили соответствующие процедуры на вставку\обновление\удаление сущностей Tag и FinancialGoal. При этом сущность Tag НЕ является абстрактной и весьма автономна. Как родительская, так и дочерняя сущность имеют связи с другими сущностями модели. Поле TtrId у сущности Tag имеет свойство StoreGeneratedPattern=Identity. Все работает хорошо за исключением момента, когда мы пытаемся добавить сущность FinancialGoal. В этом случае возникает ошибка "A dependent property in a ReferentialConstraint is mapped to a store-generated column. Column: 'TtrId'.". Текст ошибки понятен — нам говорят о том, что в ссылочной зависимости внешний ключ является "store-generated column" и им является поле TtrId. Проблема в том, что нигде в модели нет этого внешнего ключа TtrId со свойством "store-generated column". В сущности Tag поле TtrId обладает таким свойством, но оно есть primary key и не является foreign key ни для одной из сущностей. Многочасовое ковыряние в edmx-е результатов не дало.. гугление тоже Есть подозрение, что ошибка возникает из-за каких-то особенностей реализации наследования в EF.. Но это только подозрение.
G>>
G>>Заранее спасибо за помощь.

P>Во-первых, раз уж у Вас есть edmx, то это никакой ни EF 4.1, а обычный EF 4 (В EF 4.1 aka Code First edmx вообще не заводится).


Да, тут вы, пожалуй, правы.

P>Теперь про FK: у Вас же явно стоит ключ с Tag на Tag (NavParentTag). Возможно, там какой-то глюк залез.


P>Судя по тому, что пишут в интернете по этому сообщению, у Вас таки где-то ошибка в edmx. Как я понял, суть ошибки в том, что в edmx объявлено свойство, которое является ссылкой (т.е. зависимо), а мапится оно почему-то на Identity колонку, что, конечно, является ошибкой.


Суть ошибки мне понятна, но проблема в том, что поле TtrId нигде не фигурирует как зависимое (dependant) поле, а только как ключевое (principal) поле. Много времени потратил на ковыряние и поиск в самом edmx-файле — там тоже ничего противоестественного не нашел. В доказательство привожу выдержки из edmx ниже.

P>Рекомендую Вам продолжить подробное изучение edmx с поиском по ключевому слову "TtrId", либо "edmx в студию".


Вот фрагменты edmx-файла, относящиеся к рассматриваемым сущностям:

SSDL-часть

      <EntitySet Name="vwIBGoals" EntityType="IbModel.Store.vwIBGoals" store:Type="Views" store:Schema="pub" store:Name="vwIBGoals">
        <DefiningQuery>SELECT 
  [vwIBGoals].[TtrId] AS [TtrId], 
  [vwIBGoals].[RefTypeId] AS [RefTypeId], 
  [vwIBGoals].[GolCreateDate] AS [GolCreateDate], 
  [vwIBGoals].[GolTargetDate] AS [GolTargetDate], 
  [vwIBGoals].[GolCurrentAmount] AS [GolCurrentAmount], 
  [vwIBGoals].[GolTargetAmount] AS [GolTargetAmount], 
  [vwIBGoals].[GolIsAchieved] AS [GolIsAchieved], 
  [vwIBGoals].[GolMonthlyPayment] AS [GolMonthlyPayment]
  FROM [pub].[vwIBGoals] AS [vwIBGoals]</DefiningQuery>
      </EntitySet>
      <EntitySet Name="vwIBTagTree" EntityType="IbModel.Store.vwIBTagTree" store:Type="Views" store:Schema="pub" store:Name="vwIBTagTree">
        <DefiningQuery>SELECT 
  [vwIBTagTree].[TtrId] AS [TtrId], 
  [vwIBTagTree].[TtrParentId] AS [TtrParentId], 
  [vwIBTagTree].[TtrName] AS [TtrName], 
  [vwIBTagTree].[CusId] AS [CusId], 
  [vwIBTagTree].[TtrIsExpense] AS [TtrIsExpense], 
  [vwIBTagTree].[TtrTypeFlag] AS [TtrTypeFlag], 
  [vwIBTagTree].[UsrChangeId] AS [UsrChangeId]
  FROM [pub].[vwIBTagTree] AS [vwIBTagTree]</DefiningQuery>
      </EntitySet>
      <EntitySet Name="vwIBTagTreeOverrides" EntityType="IbModel.Store.vwIBTagTreeOverrides" store:Type="Views" store:Schema="pub" store:Name="vwIBTagTreeOverrides">
        <DefiningQuery>SELECT 
  [vwIBTagTreeOverrides].[TtrId] AS [TtrId], 
  [vwIBTagTreeOverrides].[CusId] AS [CusId], 
  [vwIBTagTreeOverrides].[TtoCustomName] AS [TtoCustomName], 
  [vwIBTagTreeOverrides].[UsrChangeId] AS [UsrChangeId]
  FROM [pub].[vwIBTagTreeOverrides] AS [vwIBTagTreeOverrides]</DefiningQuery>
      </EntitySet>
...
    <EntityType Name="vwIBGoals">
      <Key>
        <PropertyRef Name="TtrId" />
      </Key>
      <Property Name="TtrId" Type="int" Nullable="false" />
      <Property Name="RefTypeId" Type="int" Nullable="false" />
      <Property Name="GolCreateDate" Type="datetime" Nullable="false" />
      <Property Name="GolTargetDate" Type="datetime" Nullable="false" />
      <Property Name="GolCurrentAmount" Type="numeric" Nullable="false" Precision="19" Scale="4" />
      <Property Name="GolTargetAmount" Type="numeric" Nullable="false" Precision="19" Scale="4" />
      <Property Name="GolIsAchieved" Type="bit" Nullable="false" />
      <Property Name="GolMonthlyPayment" Type="numeric" Precision="19" Scale="4" />
    </EntityType>
    <EntityType Name="vwIBTagTree">
      <Key>
        <PropertyRef Name="TtrId" />
      </Key>
      <Property Name="TtrId" Type="int" Nullable="false" StoreGeneratedPattern="Identity" />
      <Property Name="TtrParentId" Type="int" />
      <Property Name="TtrName" Type="varchar" Nullable="false" MaxLength="256" />
      <Property Name="CusId" Type="int" />
      <Property Name="TtrIsExpense" Type="bit" />
      <Property Name="TtrTypeFlag" Type="char" Nullable="false" MaxLength="1" />
      <Property Name="UsrChangeId" Type="int" />
    </EntityType>
    <EntityType Name="vwIBTagTreeOverrides">
      <Key>
        <PropertyRef Name="TtrId" />
        <PropertyRef Name="CusId" />
      </Key>
      <Property Name="TtrId" Type="int" Nullable="false" />
      <Property Name="CusId" Type="int" Nullable="false" />
      <Property Name="TtoCustomName" Type="varchar" Nullable="false" MaxLength="256" />
      <Property Name="UsrChangeId" Type="int" />
    </EntityType>


CSDL-часть

   <EntityType Name="Tag" Abstract="false">
      <Key>
        <PropertyRef Name="TtrId" />
      </Key>
      <Property Type="Int32" Name="TtrId" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
      <Property Type="Int32" Name="TtrParentId" />
      <Property Type="String" Name="TtrName" Nullable="false" MaxLength="256" FixedLength="false" Unicode="false" />
      <Property Type="Int32" Name="CusId" />
      <Property Type="Boolean" Name="TtrIsExpense" />
      <Property Type="String" Name="TtrTypeFlag" Nullable="false" FixedLength="true" MaxLength="1" Unicode="false" />
      <Property Type="Int32" Name="UsrChangeId" />
      <NavigationProperty Name="NavChildTags" Relationship="IbModel.TagTag" FromRole="TagParent" ToRole="TagChild" />
      <NavigationProperty Name="NavParentTag" Relationship="IbModel.TagTag" FromRole="TagChild" ToRole="TagParent" />
      <NavigationProperty Name="NavCustomer" Relationship="IbModel.CustomerTag" FromRole="Tag" ToRole="Customer" />
      <NavigationProperty Name="NavTagOverrides" Relationship="IbModel.TagTagOverride" FromRole="Tag" ToRole="TagOverride" />
    </EntityType>
    <EntityType Name="TagOverride">
      <Key>
        <PropertyRef Name="TtrId" />
        <PropertyRef Name="CusId" />
      </Key>
      <Property Type="Int32" Name="TtrId" Nullable="false" />
      <Property Type="Int32" Name="CusId" Nullable="false" />
      <Property Type="String" Name="TtoCustomName" Nullable="false" MaxLength="256" FixedLength="false" Unicode="false" />
      <Property Type="Int32" Name="UsrChangeId" />
      <NavigationProperty Name="NavCustomer" Relationship="IbModel.CustomerTagOverride" FromRole="TagOverride" ToRole="Customer" />
      <NavigationProperty Name="NavTag" Relationship="IbModel.TagTagOverride" FromRole="TagOverride" ToRole="Tag" />
    </EntityType>
    <Association Name="TagTag">
      <End Type="IbModel.Tag" Role="TagParent" Multiplicity="0..1" />
      <End Type="IbModel.Tag" Role="TagChild" Multiplicity="*" />
      <ReferentialConstraint>
        <Principal Role="TagParent">
          <PropertyRef Name="TtrId" />
        </Principal>
        <Dependent Role="TagChild">
          <PropertyRef Name="TtrParentId" />
        </Dependent>
      </ReferentialConstraint>
    </Association>
    <Association Name="CustomerTagOverride">
      <End Type="IbModel.Customer" Role="Customer" Multiplicity="1" />
      <End Type="IbModel.TagOverride" Role="TagOverride" Multiplicity="*" />
      <ReferentialConstraint>
        <Principal Role="Customer">
          <PropertyRef Name="CusId" />
        </Principal>
        <Dependent Role="TagOverride">
          <PropertyRef Name="CusId" />
        </Dependent>
      </ReferentialConstraint>
    </Association>
    <Association Name="CustomerTag">
      <End Type="IbModel.Customer" Role="Customer" Multiplicity="0..1" />
      <End Type="IbModel.Tag" Role="Tag" Multiplicity="*" />
      <ReferentialConstraint>
        <Principal Role="Customer">
          <PropertyRef Name="CusId" />
        </Principal>
        <Dependent Role="Tag">
          <PropertyRef Name="CusId" />
        </Dependent>
      </ReferentialConstraint>
    </Association>
    <EntityType Name="FinancialGoal" BaseType="IbModel.Tag">
      <Property Type="Int32" Name="RefTypeId" Nullable="false" />
      <Property Type="DateTime" Name="GolCreateDate" Nullable="false" />
      <Property Type="DateTime" Name="GolTargetDate" Nullable="false" />
      <Property Type="Decimal" Name="GolCurrentAmount" Nullable="false" Precision="19" Scale="4" />
      <Property Type="Decimal" Name="GolTargetAmount" Nullable="false" Precision="19" Scale="4" />
      <Property Type="Boolean" Name="GolIsAchieved" Nullable="false" />
      <Property Type="Decimal" Name="GolMonthlyPayment" Precision="19" Scale="4" />
      <NavigationProperty Name="NavType" Relationship="IbModel.DictionaryValueFinancialGoal" FromRole="FinancialGoal" ToRole="DictionaryValue" />
    </EntityType>
    <Association Name="DictionaryValueFinancialGoal">
      <End Type="IbModel.DictionaryValue" Role="DictionaryValue" Multiplicity="1" />
      <End Type="IbModel.FinancialGoal" Role="FinancialGoal" Multiplicity="*" />
      <ReferentialConstraint>
        <Principal Role="DictionaryValue">
          <PropertyRef Name="RefId" />
        </Principal>
        <Dependent Role="FinancialGoal">
          <PropertyRef Name="RefTypeId" />
        </Dependent>
      </ReferentialConstraint>
    </Association>
    <Association Name="TagTagOverride">
      <End Type="IbModel.Tag" Role="Tag" Multiplicity="1" />
      <End Type="IbModel.TagOverride" Role="TagOverride" Multiplicity="*" />
      <ReferentialConstraint>
        <Principal Role="Tag">
          <PropertyRef Name="TtrId" />
        </Principal>
        <Dependent Role="TagOverride">
          <PropertyRef Name="TtrId" />
        </Dependent>
      </ReferentialConstraint>
    </Association>


C-S mapping

        <EntityTypeMapping TypeName="IsTypeOf(IbModel.FinancialGoal)">
          <MappingFragment StoreEntitySet="vwIBGoals">
            <ScalarProperty Name="TtrId" ColumnName="TtrId" />
            <ScalarProperty Name="RefTypeId" ColumnName="RefTypeId" />
            <ScalarProperty Name="GolCreateDate" ColumnName="GolCreateDate" />
            <ScalarProperty Name="GolTargetDate" ColumnName="GolTargetDate" />
            <ScalarProperty Name="GolCurrentAmount" ColumnName="GolCurrentAmount" />
            <ScalarProperty Name="GolTargetAmount" ColumnName="GolTargetAmount" />
            <ScalarProperty Name="GolIsAchieved" ColumnName="GolIsAchieved" />
            <ScalarProperty Name="GolMonthlyPayment" ColumnName="GolMonthlyPayment" />
          </MappingFragment>
          </EntityTypeMapping>
        <EntityTypeMapping TypeName="IsTypeOf(IbModel.Tag)">
          <MappingFragment StoreEntitySet="vwIBTagTree">
            <ScalarProperty Name="TtrTypeFlag" ColumnName="TtrTypeFlag" />
            <ScalarProperty Name="TtrId" ColumnName="TtrId" />
            <ScalarProperty Name="TtrParentId" ColumnName="TtrParentId" />
            <ScalarProperty Name="TtrName" ColumnName="TtrName" />
            <ScalarProperty Name="CusId" ColumnName="CusId" />
            <ScalarProperty Name="TtrIsExpense" ColumnName="TtrIsExpense" />
            <ScalarProperty Name="UsrChangeId" ColumnName="UsrChangeId" />
          </MappingFragment>
        </EntityTypeMapping>
Re[3]: EF 4.1 Проблемы при TPT-наследовании
От: grayver  
Дата: 18.11.11 10:44
Оценка:
Здравствуйте, grayver, Вы писали:

G>Здравствуйте, pgatilov, Вы писали:


P>>Здравствуйте, grayver, Вы писали:


G>>>Добрый день!

G>>>В БД (MS SQL 2008 R2) имеется некий "интерфейсный" слой — набор вьюшек и хранимых процедур, к которым имеет доступ наше приложение. В нашем приложении мы строим модель на базе EF 4.1, которая использует вьюхи из БД. В этой модели есть 2 сущности, для которых реализовано наследование — базовая сущность Tag и дочерняя сущность FinancialGoal. На реляционном уровне — это 2 таблицы с отношением 1 к 1, на уровне вьюх также используется общий ключ TtrId. Согласно инструкциям от MS мы создали одну сущность на базе вьюхи vwTags, потом создали наследуемую сущность на базе второй вьюхи vwGoals, удалили из набора полей сущности FinancialGoal поле TtrId и поставили в маппинге сущности FinancialGoal ключ TtrId базовой сущности Tag. Далее мы замапили соответствующие процедуры на вставку\обновление\удаление сущностей Tag и FinancialGoal. При этом сущность Tag НЕ является абстрактной и весьма автономна. Как родительская, так и дочерняя сущность имеют связи с другими сущностями модели. Поле TtrId у сущности Tag имеет свойство StoreGeneratedPattern=Identity. Все работает хорошо за исключением момента, когда мы пытаемся добавить сущность FinancialGoal. В этом случае возникает ошибка "A dependent property in a ReferentialConstraint is mapped to a store-generated column. Column: 'TtrId'.". Текст ошибки понятен — нам говорят о том, что в ссылочной зависимости внешний ключ является "store-generated column" и им является поле TtrId. Проблема в том, что нигде в модели нет этого внешнего ключа TtrId со свойством "store-generated column". В сущности Tag поле TtrId обладает таким свойством, но оно есть primary key и не является foreign key ни для одной из сущностей. Многочасовое ковыряние в edmx-е результатов не дало.. гугление тоже Есть подозрение, что ошибка возникает из-за каких-то особенностей реализации наследования в EF.. Но это только подозрение.
G>>>
G>>>Заранее спасибо за помощь.

P>>Во-первых, раз уж у Вас есть edmx, то это никакой ни EF 4.1, а обычный EF 4 (В EF 4.1 aka Code First edmx вообще не заводится).


G>Да, тут вы, пожалуй, правы.


P>>Теперь про FK: у Вас же явно стоит ключ с Tag на Tag (NavParentTag). Возможно, там какой-то глюк залез.


P>>Судя по тому, что пишут в интернете по этому сообщению, у Вас таки где-то ошибка в edmx. Как я понял, суть ошибки в том, что в edmx объявлено свойство, которое является ссылкой (т.е. зависимо), а мапится оно почему-то на Identity колонку, что, конечно, является ошибкой.


G>Суть ошибки мне понятна, но проблема в том, что поле TtrId нигде не фигурирует как зависимое (dependant) поле, а только как ключевое (principal) поле. Много времени потратил на ковыряние и поиск в самом edmx-файле — там тоже ничего противоестественного не нашел. В доказательство привожу выдержки из edmx ниже.


P>>Рекомендую Вам продолжить подробное изучение edmx с поиском по ключевому слову "TtrId", либо "edmx в студию".


G>Вот фрагменты edmx-файла, относящиеся к рассматриваемым сущностям:


G>SSDL-часть


G>
G>      <EntitySet Name="vwIBGoals" EntityType="IbModel.Store.vwIBGoals" store:Type="Views" store:Schema="pub" store:Name="vwIBGoals">
G>        <DefiningQuery>SELECT 
G>  [vwIBGoals].[TtrId] AS [TtrId], 
G>  [vwIBGoals].[RefTypeId] AS [RefTypeId], 
G>  [vwIBGoals].[GolCreateDate] AS [GolCreateDate], 
G>  [vwIBGoals].[GolTargetDate] AS [GolTargetDate], 
G>  [vwIBGoals].[GolCurrentAmount] AS [GolCurrentAmount], 
G>  [vwIBGoals].[GolTargetAmount] AS [GolTargetAmount], 
G>  [vwIBGoals].[GolIsAchieved] AS [GolIsAchieved], 
G>  [vwIBGoals].[GolMonthlyPayment] AS [GolMonthlyPayment]
G>  FROM [pub].[vwIBGoals] AS [vwIBGoals]</DefiningQuery>
G>      </EntitySet>
G>      <EntitySet Name="vwIBTagTree" EntityType="IbModel.Store.vwIBTagTree" store:Type="Views" store:Schema="pub" store:Name="vwIBTagTree">
G>        <DefiningQuery>SELECT 
G>  [vwIBTagTree].[TtrId] AS [TtrId], 
G>  [vwIBTagTree].[TtrParentId] AS [TtrParentId], 
G>  [vwIBTagTree].[TtrName] AS [TtrName], 
G>  [vwIBTagTree].[CusId] AS [CusId], 
G>  [vwIBTagTree].[TtrIsExpense] AS [TtrIsExpense], 
G>  [vwIBTagTree].[TtrTypeFlag] AS [TtrTypeFlag], 
G>  [vwIBTagTree].[UsrChangeId] AS [UsrChangeId]
G>  FROM [pub].[vwIBTagTree] AS [vwIBTagTree]</DefiningQuery>
G>      </EntitySet>
G>      <EntitySet Name="vwIBTagTreeOverrides" EntityType="IbModel.Store.vwIBTagTreeOverrides" store:Type="Views" store:Schema="pub" store:Name="vwIBTagTreeOverrides">
G>        <DefiningQuery>SELECT 
G>  [vwIBTagTreeOverrides].[TtrId] AS [TtrId], 
G>  [vwIBTagTreeOverrides].[CusId] AS [CusId], 
G>  [vwIBTagTreeOverrides].[TtoCustomName] AS [TtoCustomName], 
G>  [vwIBTagTreeOverrides].[UsrChangeId] AS [UsrChangeId]
G>  FROM [pub].[vwIBTagTreeOverrides] AS [vwIBTagTreeOverrides]</DefiningQuery>
G>      </EntitySet>
G>...
G>    <EntityType Name="vwIBGoals">
G>      <Key>
G>        <PropertyRef Name="TtrId" />
G>      </Key>
G>      <Property Name="TtrId" Type="int" Nullable="false" />
G>      <Property Name="RefTypeId" Type="int" Nullable="false" />
G>      <Property Name="GolCreateDate" Type="datetime" Nullable="false" />
G>      <Property Name="GolTargetDate" Type="datetime" Nullable="false" />
G>      <Property Name="GolCurrentAmount" Type="numeric" Nullable="false" Precision="19" Scale="4" />
G>      <Property Name="GolTargetAmount" Type="numeric" Nullable="false" Precision="19" Scale="4" />
G>      <Property Name="GolIsAchieved" Type="bit" Nullable="false" />
G>      <Property Name="GolMonthlyPayment" Type="numeric" Precision="19" Scale="4" />
G>    </EntityType>
G>    <EntityType Name="vwIBTagTree">
G>      <Key>
G>        <PropertyRef Name="TtrId" />
G>      </Key>
G>      <Property Name="TtrId" Type="int" Nullable="false" StoreGeneratedPattern="Identity" />
G>      <Property Name="TtrParentId" Type="int" />
G>      <Property Name="TtrName" Type="varchar" Nullable="false" MaxLength="256" />
G>      <Property Name="CusId" Type="int" />
G>      <Property Name="TtrIsExpense" Type="bit" />
G>      <Property Name="TtrTypeFlag" Type="char" Nullable="false" MaxLength="1" />
G>      <Property Name="UsrChangeId" Type="int" />
G>    </EntityType>
G>    <EntityType Name="vwIBTagTreeOverrides">
G>      <Key>
G>        <PropertyRef Name="TtrId" />
G>        <PropertyRef Name="CusId" />
G>      </Key>
G>      <Property Name="TtrId" Type="int" Nullable="false" />
G>      <Property Name="CusId" Type="int" Nullable="false" />
G>      <Property Name="TtoCustomName" Type="varchar" Nullable="false" MaxLength="256" />
G>      <Property Name="UsrChangeId" Type="int" />
G>    </EntityType>
G>


G>CSDL-часть


G>
G>   <EntityType Name="Tag" Abstract="false">
G>      <Key>
G>        <PropertyRef Name="TtrId" />
G>      </Key>
G>      <Property Type="Int32" Name="TtrId" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
G>      <Property Type="Int32" Name="TtrParentId" />
G>      <Property Type="String" Name="TtrName" Nullable="false" MaxLength="256" FixedLength="false" Unicode="false" />
G>      <Property Type="Int32" Name="CusId" />
G>      <Property Type="Boolean" Name="TtrIsExpense" />
G>      <Property Type="String" Name="TtrTypeFlag" Nullable="false" FixedLength="true" MaxLength="1" Unicode="false" />
G>      <Property Type="Int32" Name="UsrChangeId" />
G>      <NavigationProperty Name="NavChildTags" Relationship="IbModel.TagTag" FromRole="TagParent" ToRole="TagChild" />
G>      <NavigationProperty Name="NavParentTag" Relationship="IbModel.TagTag" FromRole="TagChild" ToRole="TagParent" />
G>      <NavigationProperty Name="NavCustomer" Relationship="IbModel.CustomerTag" FromRole="Tag" ToRole="Customer" />
G>      <NavigationProperty Name="NavTagOverrides" Relationship="IbModel.TagTagOverride" FromRole="Tag" ToRole="TagOverride" />
G>    </EntityType>
G>    <EntityType Name="TagOverride">
G>      <Key>
G>        <PropertyRef Name="TtrId" />
G>        <PropertyRef Name="CusId" />
G>      </Key>
G>      <Property Type="Int32" Name="TtrId" Nullable="false" />
G>      <Property Type="Int32" Name="CusId" Nullable="false" />
G>      <Property Type="String" Name="TtoCustomName" Nullable="false" MaxLength="256" FixedLength="false" Unicode="false" />
G>      <Property Type="Int32" Name="UsrChangeId" />
G>      <NavigationProperty Name="NavCustomer" Relationship="IbModel.CustomerTagOverride" FromRole="TagOverride" ToRole="Customer" />
G>      <NavigationProperty Name="NavTag" Relationship="IbModel.TagTagOverride" FromRole="TagOverride" ToRole="Tag" />
G>    </EntityType>
G>    <Association Name="TagTag">
G>      <End Type="IbModel.Tag" Role="TagParent" Multiplicity="0..1" />
G>      <End Type="IbModel.Tag" Role="TagChild" Multiplicity="*" />
G>      <ReferentialConstraint>
G>        <Principal Role="TagParent">
G>          <PropertyRef Name="TtrId" />
G>        </Principal>
G>        <Dependent Role="TagChild">
G>          <PropertyRef Name="TtrParentId" />
G>        </Dependent>
G>      </ReferentialConstraint>
G>    </Association>
G>    <Association Name="CustomerTagOverride">
G>      <End Type="IbModel.Customer" Role="Customer" Multiplicity="1" />
G>      <End Type="IbModel.TagOverride" Role="TagOverride" Multiplicity="*" />
G>      <ReferentialConstraint>
G>        <Principal Role="Customer">
G>          <PropertyRef Name="CusId" />
G>        </Principal>
G>        <Dependent Role="TagOverride">
G>          <PropertyRef Name="CusId" />
G>        </Dependent>
G>      </ReferentialConstraint>
G>    </Association>
G>    <Association Name="CustomerTag">
G>      <End Type="IbModel.Customer" Role="Customer" Multiplicity="0..1" />
G>      <End Type="IbModel.Tag" Role="Tag" Multiplicity="*" />
G>      <ReferentialConstraint>
G>        <Principal Role="Customer">
G>          <PropertyRef Name="CusId" />
G>        </Principal>
G>        <Dependent Role="Tag">
G>          <PropertyRef Name="CusId" />
G>        </Dependent>
G>      </ReferentialConstraint>
G>    </Association>
G>    <EntityType Name="FinancialGoal" BaseType="IbModel.Tag">
G>      <Property Type="Int32" Name="RefTypeId" Nullable="false" />
G>      <Property Type="DateTime" Name="GolCreateDate" Nullable="false" />
G>      <Property Type="DateTime" Name="GolTargetDate" Nullable="false" />
G>      <Property Type="Decimal" Name="GolCurrentAmount" Nullable="false" Precision="19" Scale="4" />
G>      <Property Type="Decimal" Name="GolTargetAmount" Nullable="false" Precision="19" Scale="4" />
G>      <Property Type="Boolean" Name="GolIsAchieved" Nullable="false" />
G>      <Property Type="Decimal" Name="GolMonthlyPayment" Precision="19" Scale="4" />
G>      <NavigationProperty Name="NavType" Relationship="IbModel.DictionaryValueFinancialGoal" FromRole="FinancialGoal" ToRole="DictionaryValue" />
G>    </EntityType>
G>    <Association Name="DictionaryValueFinancialGoal">
G>      <End Type="IbModel.DictionaryValue" Role="DictionaryValue" Multiplicity="1" />
G>      <End Type="IbModel.FinancialGoal" Role="FinancialGoal" Multiplicity="*" />
G>      <ReferentialConstraint>
G>        <Principal Role="DictionaryValue">
G>          <PropertyRef Name="RefId" />
G>        </Principal>
G>        <Dependent Role="FinancialGoal">
G>          <PropertyRef Name="RefTypeId" />
G>        </Dependent>
G>      </ReferentialConstraint>
G>    </Association>
G>    <Association Name="TagTagOverride">
G>      <End Type="IbModel.Tag" Role="Tag" Multiplicity="1" />
G>      <End Type="IbModel.TagOverride" Role="TagOverride" Multiplicity="*" />
G>      <ReferentialConstraint>
G>        <Principal Role="Tag">
G>          <PropertyRef Name="TtrId" />
G>        </Principal>
G>        <Dependent Role="TagOverride">
G>          <PropertyRef Name="TtrId" />
G>        </Dependent>
G>      </ReferentialConstraint>
G>    </Association>
G>


G>C-S mapping


G>
G>        <EntityTypeMapping TypeName="IsTypeOf(IbModel.FinancialGoal)">
G>          <MappingFragment StoreEntitySet="vwIBGoals">
G>            <ScalarProperty Name="TtrId" ColumnName="TtrId" />
G>            <ScalarProperty Name="RefTypeId" ColumnName="RefTypeId" />
G>            <ScalarProperty Name="GolCreateDate" ColumnName="GolCreateDate" />
G>            <ScalarProperty Name="GolTargetDate" ColumnName="GolTargetDate" />
G>            <ScalarProperty Name="GolCurrentAmount" ColumnName="GolCurrentAmount" />
G>            <ScalarProperty Name="GolTargetAmount" ColumnName="GolTargetAmount" />
G>            <ScalarProperty Name="GolIsAchieved" ColumnName="GolIsAchieved" />
G>            <ScalarProperty Name="GolMonthlyPayment" ColumnName="GolMonthlyPayment" />
G>          </MappingFragment>
G>          </EntityTypeMapping>
G>        <EntityTypeMapping TypeName="IsTypeOf(IbModel.Tag)">
G>          <MappingFragment StoreEntitySet="vwIBTagTree">
G>            <ScalarProperty Name="TtrTypeFlag" ColumnName="TtrTypeFlag" />
G>            <ScalarProperty Name="TtrId" ColumnName="TtrId" />
G>            <ScalarProperty Name="TtrParentId" ColumnName="TtrParentId" />
G>            <ScalarProperty Name="TtrName" ColumnName="TtrName" />
G>            <ScalarProperty Name="CusId" ColumnName="CusId" />
G>            <ScalarProperty Name="TtrIsExpense" ColumnName="TtrIsExpense" />
G>            <ScalarProperty Name="UsrChangeId" ColumnName="UsrChangeId" />
G>          </MappingFragment>
G>        </EntityTypeMapping>
G>


Значит это все-таки баг EF?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.