0

I would like to use dynamic properties, which look like this:

public class CustomProperty
{
  public string PropType { get; set; }
  public string PropValue { get; set; }
  public string PropName { get; set; }
  ...
}

...and then save these properties to a database, like this:

PropType   PropValue   PropName
--------   ---------   --------
String     "William"   "Name"
Int64      "21"        "Age"
String     "John"      "Name"
Int64      "32"        "Age"
String     "Brown"     "Haircolor"
...

I don't think I'm the first to have an idea like this, so I'm looking for an implementation (poen source / nuget etc.). But I have trouble finding one.

So my question is: is there an implemenation of dynamic properies which can be used (or improved if needed)?

Edit: As richardtallent pointer out, I'm looking for the EAV pattern. So, is there an implentation for it that can be used? Or do I have to write something myself. I would think it has been done many times before.

4

2 に答える 2

2

あなたが説明していることは、多くの場合、「EAV」(Entity-Attribute-Value) パターンと呼ばれます。

これをリレーショナル データベースに適用する場合、多くの人がアンチ パターンと見なします。これを使用すると、適切な正規化されたデータと効率的な CRUD 操作を維持することができるためです。ただし、用途はあります。

このテーマのバリエーションは、Lotus Notes から Google BigTable に至るまで、No-SQL データベースで使用されています。そのため、SQL Server の使用に縛られていない場合は、MongoDB などの C# でアクセス可能な No-SQL データベースを検討することをお勧めします。

従来の RDBMS にシリアル化するものを探しているのであれば、私はオープンソース ソリューションをすぐに知っているわけではありません。C# には ExpandoObjects がありますが、そのシステムにすぐに使用できるデータベースのシリアル化/逆シリアル化が含まれているかどうかはわかりません。

于 2012-04-14T06:18:32.583 に答える
1

バージョン 4.0 からExpando オブジェクトがあります: 動的に拡大および縮小するオブジェクトです。

これがあなたが探しているものでない場合は、明確にしてください。

于 2012-04-14T06:15:03.117 に答える