1

Entity Framework(VS 2008 sp1、3.5)で階層モデルごとのテーブルを実行しようとしています。

私のモデルのほとんどは非常に単純で、複数のサブタイプを継承する抽象型です。

しかし、私はこの最新の課題に苦労しています。PARTIES(abstract) から継承する必要がある PERSONS(abstract) から継承したい STUDENTS があります。

これを行うたびに、「エラー 2078: EntityType 'Model.PERSONS' は Abstract であり、IsTypeOf を使用してのみマップできます。」というメッセージが表示されます。問題は、エンティティ セットで PARTIES が既に IsTypeOf として定義されていることだと思います。

それで、これは可能ですか?PERSONS abstract = false を作成し、偽の条件付きマッピングを割り当てることで、この問題を回避できます。しかし、これはばかげた回避策のようです。

4

1 に答える 1

2

XML エディターを使用してモデルを編集します。マッピングを見つけて、対応する EntityTypeMapping タグに IsTypeOf を追加します。
あなたのケースに似た例を次に示します:
SQL Server DDL:

CREATE TABLE [dbo].[生徒] (
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [PartyInfo] [varchar](max) NOT NULL,
    [PersonInfo] [varchar](最大) NOT NULL,
    [スタッド情報] [varchar](最大) NOT NULL,
    CONSTRAINT [PK_Student] PRIMARY KEY CLUSTERED ( [Id] ASC )
  )

EDMX:

<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx バージョン="1.0"
xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx">
<!-- EF ランタイム コンテンツ -->
<edmx:ランタイム>
<!-- SSDL コンテンツ -->
<edmx:StorageModels>
  <Schema Namespace="test_1Model.Store" Alias="Self"
Provider="System.Data.SqlClient" ProviderManifestToken="2005"
xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator"
xmlns="http://schemas.microsoft.com/ado/2006/04/edm/ssdl">
    <EntityContainer Name="test_1ModelStoreContainer">
      <EntitySet Name="Student" EntityType="test_1Model.Store.Student"
store:Type="テーブル" スキーマ="dbo" />
    </エンティティコンテナ>
    <EntityType Name="学生">
      <キー>
        <PropertyRef Name="ID" />
      </キー>
      <Property Name="Id" Type="int" Nullable="false"
StoreGeneratedPattern="アイデンティティ" />
      <Property Name="PartyInfo" Type="varchar(max)" Nullable="false" />
      <Property Name="PersonInfo" Type="varchar(max)" Nullable="false" />
      <Property Name="StudInfo" Type="varchar(max)" Nullable="false" />
    </エンティティ タイプ>
  </スキーマ>
</edmx:ストレージモデル>
<!-- CSDL コンテンツ -->
<edmx:ConceptualModels>
  <Schema Namespace="test_1Model" Alias="Self"
xmlns="http://schemas.microsoft.com/ado/2006/04/edm">
    <EntityContainer Name="test_Entities">
      <EntitySet Name="PartySet" EntityType="test_1Model.Party" />
    </エンティティコンテナ>
    <EntityType Name="Party" Abstract="true">
      <キー>
        <PropertyRef Name="ID" />
      </キー>
      <Property Name="Id" Type="Int32" Nullable="false" />
      <Property Name="PartyInfo" Type="String" Nullable="false"
MaxLength="Max" Unicode="false" FixedLength="false" />
    </エンティティ タイプ>
    <EntityType Name="Person" BaseType="test_1Model.Party" Abstract="true" >
      <Property Name="PersonInfo" Type="String" Nullable="false" />
    </エンティティ タイプ>
    <EntityType Name="Student" BaseType="test_1Model.Person" >
      <Property Name="StudInfo" Type="String" Nullable="false" />
    </エンティティ タイプ>
  </スキーマ>
</edmx:概念モデル>
<!-- CS マッピング コンテンツ -->
<edmx:マッピング>
  <マッピングスペース="CS"
xmlns="urn:schemas-microsoft-com:windows:storage:mapping:CS">
    <EntityContainerMapping
StorageEntityContainer="test_1ModelStoreContainer"
CdmEntityContainer="test_Entities">
      <EntitySetMapping Name="PartySet">
        <EntityTypeMapping TypeName="IsTypeOf(test_1Model.Party)">
          <MappingFragment StoreEntitySet="Student">
            <ScalarProperty Name="PartyInfo" ColumnName="PartyInfo" />
            <ScalarProperty Name="Id" ColumnName="Id" />
          </マッピングフラグメント>
        </EntityTypeMapping>
        <EntityTypeMapping TypeName="IsTypeOf(test_1Model.Person)">
          <MappingFragment StoreEntitySet="Student">
            <ScalarProperty Name="Id" ColumnName="Id" />
            <ScalarProperty Name="PersonInfo" ColumnName="PersonInfo" />
          </マッピングフラグメント>
        </EntityTypeMapping>
        <EntityTypeMapping TypeName="test_1Model.Student">
          <MappingFragment StoreEntitySet="Student">
            <ScalarProperty Name="PartyInfo" ColumnName="PartyInfo" />
            <ScalarProperty Name="PersonInfo" ColumnName="PersonInfo" />
            <ScalarProperty Name="Id" ColumnName="Id" />
            <ScalarProperty Name="StudInfo" ColumnName="StudInfo" />
          </マッピングフラグメント>
        </EntityTypeMapping>
     </EntitySetMapping>
  </EntityContainerMapping>
</マッピング>
</edmx:マッピング>
</edmx:ランタイム>
<!-- EF デザイナーのコンテンツ (以下は手動で編集しないでください) -->
<edmx:Designer xmlns="http://schemas.microsoft.com/ado/2007/06/edmx">
    <edmx:接続>
      <DesignerInfoPropertySet>
        <DesignerProperty Name="MetadataArtifactProcessing"
Value="EmbedInOutputAssembly" />
      </DesignerInfoPropertySet>
    </edmx:接続>
  <edmx:オプション>
    <DesignerInfoPropertySet>
      <DesignerProperty Name="ValidateOnBuild" Value="true" />
    </DesignerInfoPropertySet>
  </edmx:オプション>
  <!-- 図の内容 (形状とコネクタの位置) -->
  <edmx:ダイアグラム>
    <ダイアグラム名="SqlServer_Model" />
  </edmx:ダイアグラム>
</edmx:デザイナー>
</edmx:Edmx>
于 2009-12-10T09:09:10.130 に答える