[解決済み] EF Code First "Invalid column name 'Discriminator'" but no inheritance.
質問
私のデータベースにはSEntriesというテーブルがあります(CREATE TABLEステートメントの下を参照してください)。このテーブルには、主キー、いくつかの外部キーがあり、特別なことは何もありません。しかし、何らかの理由で、このテーブルはEFプロキシクラスに"Discriminator"カラムを持つことになりました。
C#ではこのようにクラスが宣言されています。
public class SEntry
{
public long SEntryId { get; set; }
public long OriginatorId { get; set; }
public DateTime DatePosted { get; set; }
public string Message { get; set; }
public byte DataEntrySource { get; set; }
public string SourceLink { get; set; }
public int SourceAppId { get; set; }
public int? LocationId { get; set; }
public long? ActivityId { get; set; }
public short OriginatorObjectTypeId { get; set; }
}
public class EMData : DbContext
{
public DbSet<SEntry> SEntries { get; set; }
...
}
そのテーブルに新しい行を追加しようとすると、エラーが表示されます。
System.Data.SqlClient.SqlException: Invalid column name 'Discriminator'.
この問題は、C#のクラスを他のクラスから継承している場合にのみ発生しますが、SEntryは何も継承していません(上記をご覧ください)。
さらに、一度、SEntriesプロパティのEMDataインスタンスにマウスオーバーすると、デバッガにツールチップが表示されるのですが。
base {System.Data.Entity.Infrastructure.DbQuery<EM.SEntry>} = {SELECT
[Extent1].[Discriminator] AS [Discriminator],
[Extent1].[SEntryId] AS [SEntryId],
[Extent1].[OriginatorId] AS [OriginatorId],
[Extent1].[DatePosted] AS [DatePosted],
[Extent1].[Message] AS [Message],
[Extent1].[DataEntrySource] AS [DataE...
この問題の真相を知るために、何か提案やアイデアがあれば教えてください。テーブルの名前を変えたり、主キーを変えたり、いろいろやってみたのですが、うまくいきません。
SQL-Tableです。
CREATE TABLE [dbo].[SEntries](
[SEntryId] [bigint] IDENTITY(1125899906842624,1) NOT NULL,
[OriginatorId] [bigint] NOT NULL,
[DatePosted] [datetime] NOT NULL,
[Message] [nvarchar](500) NOT NULL,
[DataEntrySource] [tinyint] NOT NULL,
[SourceLink] [nvarchar](100) NULL,
[SourceAppId] [int] NOT NULL,
[LocationId] [int] NULL,
[ActivityId] [bigint] NULL,
[OriginatorObjectTypeId] [smallint] NOT NULL,
CONSTRAINT [PK_SEntries] PRIMARY KEY CLUSTERED
(
[SEntryId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[SEntries] WITH CHECK ADD CONSTRAINT [FK_SEntries_ObjectTypes] FOREIGN KEY([OriginatorObjectTypeId])
REFERENCES [dbo].[ObjectTypes] ([ObjectTypeId])
GO
ALTER TABLE [dbo].[SEntries] CHECK CONSTRAINT [FK_SEntries_ObjectTypes]
GO
ALTER TABLE [dbo].[SEntries] WITH CHECK ADD CONSTRAINT [FK_SEntries_SourceApps] FOREIGN KEY([SourceAppId])
REFERENCES [dbo].[SourceApps] ([SourceAppId])
GO
ALTER TABLE [dbo].[SEntries] CHECK CONSTRAINT [FK_SEntries_SourceApps]
GO
解決方法は?
Entity Frameworkは、データベース上のテーブルにマッピングされたPOCOクラスを継承するクラスは、派生クラスがDBに保存されない場合でも、Discriminatorカラムを必要とすると仮定することが判明した。
解決方法は非常に簡単で、以下のように
[NotMapped]
を派生クラスの属性として指定します。
例
class Person
{
public string Name { get; set; }
}
[NotMapped]
class PersonViewModel : Person
{
public bool UpdateProfile { get; set; }
}
ここで、Person クラスをデータベース上の Person テーブルにマッピングしても、派生クラスが
[NotMapped]
.
さらにヒントとして
[NotMapped]
を、DB上のフィールドにマッピングしたくないプロパティに設定します。
関連
-
[解決済み] Entity Framework: "ストアの更新、挿入、または削除ステートメントが予期しない行数 (0) に影響しました。" [クローズド]。
-
[解決済み] エンティティ・フレームワーク・マイグレーションをリセットする
-
[解決済み】Entity Frameworkで複数のカラムにユニークキー制約を設定する
-
[解決済み] Entity Framework Code Firstでオブジェクトをデタッチするにはどうすればいいですか?
-
[解決済み] キーワードはサポートされていません。"データソース" Entity Framework Contextの初期化
-
[解決済み] EF 5 Code First Migrationsから完全なSQLスクリプトを生成する
-
[解決済み] Entity Frameworkのバージョンは?
-
[解決済み] Entity FrameworkとSQL Server View
-
[解決済み] Entity Framework Code First - Fluent ApiとData Annotationsのメリット・デメリット【終了しました
-
[解決済み] Entity Framework コード 一意の列
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] コードファーストとモデル・データベースファーストの比較【終了しました
-
[解決済み] Entity Framework: "ストアの更新、挿入、または削除ステートメントが予期しない行数 (0) に影響しました。" [クローズド]。
-
[解決済み】1つ以上の外部キーのプロパティが非NULLであるため、リレーションシップを変更できませんでした。
-
[解決済み] Entity Framework Code Firstでオブジェクトをデタッチするにはどうすればいいですか?
-
[解決済み] Entity Framework - やり直し - すべての移行を元に戻す/ロールバックする
-
[解決済み] キーワードはサポートされていません。"データソース" Entity Framework Contextの初期化
-
[解決済み] EF 5 Code First Migrationsから完全なSQLスクリプトを生成する
-
[解決済み] Entity Framework 4 / POCO - 何から始めるか?[クローズド]
-
[解決済み] Entity FrameworkとSQL Server View
-
[解決済み] Entity Framework コード 一意の列