(n)Hibernate - 複数のテーブルを1クラスに動的にマッピングすることは可能です。 -- c# フィールド と nhibernate フィールド と hibernate フィールド と orm フィールド と gis フィールド 関連 問題

(N)Hibernate - is it possible to dynamically map multiple tables to the one class












2
vote

問題

日本語

GISオブジェクトに関する情報を毎週/クラスのGISオブジェクト(Road、River、Building、Sea、...)に格納されているGISソフトウェアを使用し、メタデータテーブルを保存するという状況があります。どのクラス名とそのDBテーブルに関する情報を格納します。

異なるクラスのそれらのGISオブジェクトは、いくつかのパラメータ、すなわち説明およびIDを共有する。 1つの一般的なC#クラス(GisObjectと呼びましょう)でこれらのさまざまなGISクラスのすべてを表現したいです。与えられたGISのGISオブジェクトをリストするアプリケーションの非GIS部分から行う必要があります。クラス。

私の問題は、Nhibernateを使用してこれらのオブジェクトをマッピングして、受信するC#GisObjectを作成し、テーブル名をメタテーブルから読み取るパラメータとして使用する(それは2つのステップで可能です、私は最初のステップでテーブル名を手動で取得してから、GisObjectデータを引くときにそれをNhibernateに渡すことができます)。

誰かがこのような状況に対処していて、まったく行うことができますか?

英語

I have the situation where i use GIS software which stores the information about GIS objects into separate database table for each type/class of GIS object (road, river, building, sea, ...) and keeps the metadata table in which it stores info about the class name and its DB table.

Those GIS objects of different classes share some parameters, i.e. Description and ID. I'd like to represent all of these different GIS classes with one common C# class (let's call it GisObject), which is enough for what i need to do from the non-GIS part of the application which lists GIS objects of the given GIS class.

The problem for me is how to map those objects using NHibernate to explain to the NHibernate when creating a C# GisObject to receive and use the table name as a parameter which will be read from the meta table (it can be in two steps, i can manually fetch the table name in first step and then pass it down to the NHibernate when pulling GisObject data).

Has anybody dealt with this kind of situation, and can it be done at all?

</div
              

回答リスト

1
 
vote

ここで最も簡単なことがあるように聞こえますが、すべての共通GISメンバーを持つ抽象基本クラスを作成し、次に必要なノヒサ中のマッピング以上の他のXクラスを継承することができます。その後、ファクトリパターンを使用して、メタデータを使用して特定の型のオブジェクトを作成します。

 

It sounds like the simplest thing to do here may be to create an abstract base class with all of the common GIS members and then to inherit the other X classes that will have nothing more than the necessary NHibernate mappings. I would then use the Factory pattern to create the object of the specific type using your metadata.

</div
 
 
1
 
vote
vote
ベストアンサー
 

@ブリアン・キアソン

残念ながら、クラスがアプリケーションで動的に作成されるため、GISデータのすべてのクラスを作成するオプションではありません。同じタイプのすべてのGISデータはクラスである必要がありますが、ユーザーが新しいデータセットを取得してデータベースに入れる可能性があります。私のユーザーがアプリケーションに持つクラスが正面に知らないことがわかりません。したがって、明日は別の新しいデータベーステーブルがあるため、前にクラスごとのマッピングモデルは機能しません。

を使用して新しいクラスを作成する必要があるためです。

@ALL. 私のGisObjectクラスのXML Configファイルに私自身のカスタムクエリを書き込む可能性があるかもしれません。その後、

を使用してそのクエリのクエリの取得 <事前> <コード> string qs = getSession().getNamedQuery(queryName);

と文字列を使用して、パラメータとして渡すデータベース名を挿入します。

<事前> <コード> qs = qs.replace(":tablename:", tableName);

どのようにその解決策について感じますか?テーブル名がユーザー入力としてフェッチされる制御されていない環境でセキュリティリスクである可能性があることを知っていますが、この場合、私は私が読み取るGISデータクラスの右および有効なテーブル名を含むメタテーブルを持っています。 GISオブジェクトの特定クラスのデータを取得するためのクエリを呼び出す。

 

@Brian Chiasson

Unfortunately, it's not an option to create all classes of GIS data because classes are created dynamically in the application. Every GIS data of the same type should be a class, but my user has the possibility to get new set of data and put it in the database. I can't know in front which classes my user will have in the application. Therefore, the in-front per-class mapping model doesn't work because tomorrow there will be another new database table, and a need to create new class with new mapping.

@all There might be a possibility to write my own custom query in the XML config file of my GisObject class, then in the data access class fetching that query using the

string qs = getSession().getNamedQuery(queryName); 

and use the string replace to inject database name (by replacing some placeholder string) which i will pass as a parameter.

qs = qs.replace(":tablename:", tableName); 

How do you feel about that solution? I know it might be a security risk in an uncontrolled environment where the table name would be fetched as the user input, but in this case, i have a meta table containing right and valid table names for the GIS data classes which i will read before calling the query for fetching data for the specific class of GIS objects.

</div
 
 
0
 
vote

それをすることができる1つの方法は、インタフェースを宣言することです。これは、インターフェイス上で宣言された共通のプロパティを持つIGISObjectという方法です。次に、各テーブルにマッピングする具体的なクラスを実装します。そのように、彼らはまだIgisObjectの型のすべてになるでしょう。

 

one way you could do it is to declare an interface say IGisObject that has the common properties declared on the interface. Then implement a concrete class which maps to each table. That way they'll still be all of type IGisObject.

</div
 
 
 
 
0
 
vote

あなたはここでAyendeを言っているのかを見てもらうことができます:http://www.ayende.com/blog/archive/2007/04/24/multi-table-entities-in-nhibernate。 ASPX "REL =" NOFOLLOW NOREFERRER ">マルチテーブルエンティティ

しかしあなたは別々のテーブルを持っているので、私はそれがうまくいくとは思わない。 nhuser group

をチェックすることもできます。
 

You can have a look at what Ayende is saying here : MultiTable Entities.

But since you have separate tables , i don't think it will work. You can also check out nhuser group

</div
 
 
0
 
vote

私はあなたがデータベース内のGISデータの後に行ったのか、そしてあなたのために抽象化として提供されるAPIを使用していない理由に質問します。これがESRYシステムの場合、静的データベースビューをGISオブジェクトに作成できるツールがあり、その時点からデータ抽出に適している可能性があるツールがあります。

 

I guess I'd ask the question to why you are going after the GIS data directly in the database and not using what API that is typically provided as an abstraction for you. If this is an ESRI system there are tools that allow you to create static database views into their GIS objects and then maybe from that point it might be appropriate for data extract.

</div
 
 
 
 
0
 
vote

Nhibernateのマニュアルから、継承マッピングのいずれかを使用できます。 a>。

テーブルごとに別のクラスを持つこともありますが、それらがすべて一般的なインターフェイス

を実装させることがあります。
 

From the NHibernate documentation, you could use one of the inheritance mappings.

You might also have a separate class for each table, but have them all implement some common interface

</div
 
 

関連する質問

2  ジオパンダと他の多角形内の多角形の領域の計算  ( Calculating areas of polygons inside other polygons with geopandas ) 
私は2つの地理的なものを持っています: <事前> <コード> df1 = gpd.GeoSeries([Polygon([(0,0), (2,0), (2,2), (0,2)]), Polygon([(1.5,1.5), (...

-1  Mongo GeopinInエラー:ポリゴン座標は配列でなければなりません  ( Mongo geowithin error polygon coordinates must be an array ) 
Geoポイントを持つデータセットを持っています。 {{_ID ...その他のフィールド...場所:{type: "point"、座標:[0,0]}}}}}}}} 私がやろうとしていることは、水域にあるポイントを持つ文書を除外して削除することです。 s...

0  Google Maps Flex API:ダブルクリックの両方を処理しますか?  ( Google maps flex api handle both double and single clicks ) 
ダブルクリックから単一のマウスをクリックしてください。私のシングル [リスナー]をクリックすると、ダブルクリックをすべて閉じ込めているようです。 href="http://www.sustainablegis.com/projects/tz/tzmap/">...

25  地図ルーティング、A LA Googleマップ?  ( Map routing a la google maps ) 
私は常に地図ルーティングによって興味をそそられていましたが、私はそれに良い紹介(または高度なものさえ)レベルのチュートリアルを見つけたことがありません。誰かにポインタ、ヒントなどがありますか? 更新:私は主に地図システムの実装方法(データ構造、アルゴリズムな...

2  PGからSHPへのOGR2OGRからSHPへの変更データタイプ.DBF  ( Ogr2ogr from pg to shp changes data type in dbf ) 
更新: はい、それはそれでした! Mloskotが言ったように、Tabel全体をダンプする必要があります。 SQLを持つフィールドを選択すると、Field幅に関する情報が失われます。 ありがとう、それはそれを修正しました! こんにちは、 私は ogr2ogr...

15  ラスタマップ上の線形機能を識別し、Rを使用して線形形状オブジェクトを返す  ( Identify a linear feature on a raster map and return a linear shape object using ) 
道路や川などの線形機能をラスターマップで識別し、R. を使用して線形の空間オブジェクト(<コード> SpatialLines クラス)に変換したいと思います。 <コード> raster および<コード> sp パッケージは、機能をラスタからポリゴンベクトルオ...

0  ラスタからポイントへの変換:すべてのピクセルの変換方法Google Earthエンジンの場合  ( Raster to point conversion how to convert every single pixel on google earth e ) 
良い日。私はGoogle Earth Engineを使用してラスタをポイントに変換しようとしています。私のラスターには1つのバンド(クラスター)があり、それは私のROIに切り取られました。私はGoogle Earth Engineの reduceToVecto...

1  リーフレットレイヤコントロールのレイヤのソート順  ( Sort order of layers in leaflet layer control ) 
私は、いくつかのGeJSONデータを別々の垂直層に表示するためのリーフレットマップを作成しました。 レイヤコントロールには、「レイヤ0、レイヤ1、レイヤ2」とは対照的に、レイヤコントロールはオプション、すなわちレイヤ0、レイヤ2、レイヤ1 "を列挙している点が...

11  OpenLayersのポイントの座標を見つける  ( Finding coordinates of a point in openlayers ) 
OpenLayersの地図上の特定の点の座標をどのように得ることができますか? ...

3  MySQLでは、経度/緯度値を効率的に利用するのですか?  ( How do i utilise longitude latitude values efficiently in mysql ) 
ここでは英国では、各郵便番号の経度と緯度の座標にアクセスすることができます。 "NofollowNoreferrer"> Wikileaks Postcodes UK 重要。このデータをパブリックアプリケーションで使用しないでください - データが故意に破損し...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有