問題タブ [database-metadata]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
740 参照

c# - Entity Framework エンティティは DataSpace.OSpace (_workspace.GetItemCollection(DataSpace.OSpace)) にはありませんが、DataSpace.CSpace にはあります

私はXMLエンティティフレームワークの s をいじっています。実行時にプロパティを挿入できるタイプのエンティティを作成しようとしました。最初にDynamicEntity動的なオブジェクトを作成しました

エンティティはこれから継承します

public partial class QUOTE_HOUSE : DynamicEntity

(そして、dbからデータを取得した後にプロパティを手動で設定するとうまくいくようです)。

したがって、プロパティを削除するこのメカニズムに基づいて、プロパティを XML に挿入する別のメカニズムを実行しようとしましたが、すべてがうまくいったようです (少なくとも、XML が正しくない場合に通常行われるマッピングで爆発することはありませんvar mappingCollection = new StorageMappingItemCollection(conceptualCollection, storageCollection, new[] {mappingXml.CreateReader()});)。

問題は、クエリを実行するとEFが爆発することです

エンティティ タイプ QUOTE_HOUSE は、現在のコンテキストのモデルの一部ではありません。

説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細: System.InvalidOperationException: エンティティ タイプ QUOTE_HOUSE は、現在のコンテキストのモデルの一部ではありません。

[InvalidOperationException: エンティティ タイプ QUOTE_HOUSE は、現在のコンテキストのモデルの一部ではありません。]
System.Data.Entity.Internal.InternalContext.UpdateEntitySetMappingsForType(Type entityType) +208
System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType ) ) +50

pdbをロードした後TryUpdateEntitySetMappingsForTypeにトレースしたものSystem.Data.Entity.Internal.InternalContextEF

基本的に何が起こるかQUOTE_HOUSEは、this._workspace.GetItemCollection(DataSpace.OSpace)どこUpdateEntitySetMappingsからマッピングしようとするかではありません。

それが入っているかどうかをチェックし、そうではないので、アイテムが存在しない場所this._entitySetMappingsCache.ContainsKey(entityType))を繰り返しマッピングの更新を試みますthis._workspace.GetItemCollection(DataSpace.OSpace)

ただし、エンティティが に存在することがわかりますthis._workspace.GetItems<EntityContainer>(DataSpace.CSpace)

完全なUpdateEntitySetMappings外観は次のとおりです。

エンティティはどのようにして this._workspace.GetItemCollection(DataSpace.OSpace) に入りますか? 実体が にあるのに にCSpaceないのはなぜOSpaceですか?

編集: 報奨金でクラックしたい人のために、問題を再現するために環境をセットアップする必要があるかもしれないコンポーネントを以下に示します。

最初にデータベースから生成されたエンティティ (DynamicEntityコードは上にあります)

データベースの DbContext にはコンストラクターのオーバーロードが必要です

列注入を行うメカニズム (これは大まかなプロトタイプなので、見栄えが悪いのは許してください)、try string 列を注入すると、問題なくマップされることがわかります。

初期化:

QUOTE_HOUSEエンティティから oracle データベースを生成し、いくつかのダミー値を入力できるはずです.ToList()。データベースを生成した後、データベースに追加の列を追加しますが、モデルには追加しません ( alter table QUOTE_HOUSE add TESTCOL Varchar2(20)) - 実行時にモデルに挿入される列をデータベースに追加します。また、 EF アセンブリをデバッグする必要がある場合もあります。これを行う方法は次のとおりです。さらに情報が必要な場合、または何か見逃している場合はお知らせください。

0 投票する
2 に答える
85 参照

java - DatabaseMetaData.ownDeletesAreVisible vs DatabaseMetaData.deletesAreDetected Controversy

I am using JDBC with mysql-connector-java-6.0.2.jar, and, unless I am doing something wrong, I think DatabaseMetaData.ownDeletesAreVisible and DatabaseMetaData.deletesAreDetected implementations are acting somehow inconsistently between each other.

Here's what the JDBC spec says regarding ownDeletesAreVisible:

"...If the deleted row is removed or replaced by an empty row, the method DatabaseMetaData.ownDeletesAreVisible(int type) will return true. It returns false if the ResultSet object still contains the deleted row, which means that the deletion is not visible as a change to ResultSet objects of the given type..."

And regarding deletesAreDetected:

"...The method deletesAreDetected returns false if a row deleted from the ResultSet object is removed from it and true if the deleted row is replaced by an empty or invalid row..."

I added the outputs as comments:

0 投票する
0 に答える
1176 参照

metadata - ビューの完全な列メタデータ?

からテーブルにクエリを実行dbc.columnsすると、すべての列、特にデータ型、長さ、null 許容/非 null などの完全なメタデータが取得されます。ビューにクエリを実行すると、データベース、テーブル、および列の名前のみが取得されます。他のすべてのフィールドは null です。

何もしないビューがある場合select * from table、基になるテーブルのメタデータは、データベース オブジェクトにコンパイルされるときにビューに伝達されるようです。Teradata がすべての可能な論理パスを分析して計算列のタイプを決定することが私の実験で示されたので、これは計算列に対しても理にかなっています。次に例を示します。

その case ステートメントでは、最初の条件のみが true を返すため、結果は常に になります'a'。ただし、テーブル DDL を見ると、VARCHAR(4)すべてのケースを分析することを証明する列を計算していることがわかります。

したがって、DBC を介してそのビューを照会すると、前述の列以外のすべての列が null になるにもかかわらず、このビュー メタデータがどこかに存在すると仮定するのが妥当と思われます。

0 投票する
1 に答える
53 参照

java - DatabaseMetaData プログラムがテーブル名をフェッチしない

を使用してユーザー rt からすべてのテーブル名をフェッチするプログラムを作成しましたDatabaseMetaDataが、プログラムは正常にコンパイルされ、実行してもテーブル名がフェッチされません。テーブルのリストを実行して表示します。その後、名前はありません。プログラムが終了します。

私のプログラムで間違ったロジックを見つけるのを手伝ってください。

0 投票する
1 に答える
447 参照

ssis - SSIS で OLE DB ソースから 2 番目のデータセットを取得する

DB1 からデータを読み取り、別の DB2 に書き込む必要があります。CTE と一時テーブルで複雑なクエリを使用していますが、いいえ、このクエリを SProc に入れることはできません。OLE DB ソースと OLE DB 宛先を使用しています。

クエリを OLEDBSource に SQL コマンドとして配置すると、CTE が一時テーブルを使用しているため、メタデータを特定できないという通常の苦情が寄せられます。

SProc ではないため、「結果セットを使用する」回避策を使用できません。だから私は他の回避策、「SET FMTONLY ON/OFF」を試してみます。

OLE DB ソースはクエリを受け入れますが、2 つのデータセットを出力します。最初は空で、2 番目は必要なデータです。OLE DB Destination は、最初の結果セット (空の結果セット) のみを読み取るため、単一の行を書き込みません。

どうすればこれを解決できますか?

一時テーブルを他のものに変更することはできず、基本的にクエリを変更することはできません。可能であれば、SQL ソリューションではなく、SSIS ソリューションを探しています。どうも。

0 投票する
0 に答える
670 参照

java - DatabaseMetaData.getColumns() に列がありません

DatabaseMetaData.getColumns()の Java 7 Javadoc は、最初の名前がTABLE_CATで最後の名前がIS_GENERATEDCOLUMNの 24 列のResultSetを返すと述べています。しかし、Oracle から受け取った結果セットには 18 列しかありません。次のコードで確認しました。

上記のコードは、次の出力を生成します。

24 列すべてを取得できないのはなぜですか? 私は何が欠けていますか?

0 投票する
2 に答える
79 参照

sql - EAV と同様のメタデータ駆動型スキーマからデータをクエリ

EAVに似たデータモデルがあります。ただし、属性のセットは限られています。私たちのデータモデルでは、個人が行ったさまざまなアクティビティを保存しており、アクティビティの種類に基づいて属性が異なります。

個人のアクティビティと対応する属性/値を取得したいと考えています。ActivityActivityDetailsテーブル、および予想される結果セットを示しました。

データモデルから期待される結果セットに到達する方法を教えてください。ある種のピボットを行う必要があります。しかし、同じに到着するかどうかはわかりません。

以下のサンプル データでは、ClickURLがアクティビティです。URLAddressClickCountClickDateの3 つの属性があります。3 つの属性に対応する値は、 www.companyurl.com1020140101 です。

結果セットは次のようになります。

私たちのデータモデルと期待される結果

データを使用したサンプル クエリ