質問

int pk、1つはnullフィールドではなく、2つのnull stringフィールドを備えたテーブルがあります。

EFでTPHスタイルのデザインをセットアップするとき、このように設定します。

トップレベルのタイプには、PKとNOT NULLフィールドのみがあります。

最初のレベルでは、最初のnullableフィールドを判別器としてチェックします。 NOT NULLの結果のタイプは抽象的です。それに応じてフィールドをマップします。

私はこれを2番目のフィールドで再び行い、再びnullではない場所でマッピングします。マップするフィールドでnullable = falseを設定します。

<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>

「異なるキーを持つ2つのエンティティが同じ行にマッピングされています」を取得しています。

最初のアイテムの属性が子供たちに継承されていないのかもしれないからだと思っています。

nullfield1がnullとnullfield2がnullでないというケースの世話をするために3番目のタイプを作成しました(これは私のdbでは起こりません、私は制約があります)が、たとえそれを追加しても機能しません。

2人のサブ子供のいずれかにNot Null条件を明示的に追加するには、列をマップする必要がありますが、それを何らかの無関係なプロパティにマッピングしても機能しません。

「Bothnullitem」の条件の組み合わせも機能しません。

何か案は?

役に立ちましたか?

解決

welp、私は継承を通じて識別子の列を伝えることをあきらめました。そのため、3つのビュー、1つのトップレベル、null field1で1つ、null field 1ではなく、null field 1では、フィールドを識別子にします。 EFの列。これは私の問題に対する安っぽい答えのように聞こえるので、私は取引が何であるかを知る人から聞きたいです。ビューラー?

更新:修正! MSDN(http://msdn.microsoft.com/en-us/library/cc716779.aspx)iで見つけた記事の1つで、水平方向のパーティションコンセプトから外れて、MSLに条件を手動で追加しました。デザイナーからこの作業を自動的に持つことはできないようです。疑問に思っている人のために、XMLエディターでEDMXを開き、ダウンしてマッピングの条件要素を見てください。必要に応じて追加の条件を追加します(明らかに条件が親エンティティから継承されないため、子供に手動で追加する必要があります)とコンパイルしてください!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top