カスタムフォームデザイナーを実装しています。これで、レイアウトをデータベースに永続化することができます。
テクノロジーの制限
- .NET 4.0
- NHibernate
- 流暢なNHibernate
- MSSQL 2008 R2
これが私が思いついたデザインです:
コントロールテーブル
- Id int Identity
- varchar(300)と入力します
ControlPropertiesテーブル
- Id int Identity
- ControlIdintFKからControls.IDへ
- 名前varchar(300)
- 値varchar(max)
コントロールクラス
public class Control
{
public virtual int Id { get; set; }
public virtual string Type { get; set; }
public virtual Dictionary<string, string> Properties { get; set; }
}
次に、これをマップして、レイアウトをリロードするために次のようなことを実行できるようにします。
var controls = GetListOfControlsUsingNHibernate();
foreach (var control in controls){
var newControl = CreateControlFromType(control.Type);
SetPropertiesViaTypeDescriptor(newControl, control.Properties);
this.Controls.Add(newControl);
}
2つの質問があります。
- Fluent NHibernateを使用してこれをどのようにマッピングしますか?
- EAVを含まず、すべての値を文字列として格納するより良いアプローチはありますか?