[英]Fluent NHibernate mapping
我是NHibernate和Fluent NHibernate的新手。
假設我有以下情況
Table Activities (uniquidentier ID, varchar ActivityName)
Table ActivityParameters(uniqueidentifier ID, varchar ParameterName,
varbinary(8000) ParameterValue)
和下面的課程
public static Acivity
{
.......
public virtual Guid Id {get; private set;}
public virtual string ActivityName {get; private set;}
public virtual IDictionary<string, object> ActivityParameters {get; private set;}
}
我該如何編寫類圖? 更具體地說,我如何編寫活動參數的映射?
一位同事指出了這個網站 。
基於這個討論,我來了
Table("Activities");
Id(x => x.Id).Column("ID").GeneratedBy.Guid();
Map(x => x.ActivityName).Not.Nullable().Length(50);
HasMany(x => x.ActivityParameters)
.KeyColumn("ActivityID")
.AsMap<string>(idx => idx.Column("ParameterName"), elem => elem.Column("ParameterValue"))
.Not.LazyLoad()
.ForeignKeyCascadeOnDelete()
.Table("ActivityParameters");
我必須測試一下。
這似乎有幫助。
從理論上講它應該是這樣的:
public class ActivityClassMap : ClassMap<Activity>
{
...
HasMany(x => x.ActivityParameters)
.AsMap(x=>x.NameOfParameterOrWhatever)
.KeyColumnNames.Add("ParameterId");
...
}
但這只是通過谷歌的一個小調查 - 我沒有在實踐中嘗試這一點。
Ps不要忘記拿起最新版本。
根據你的提示,我來:
WithTable("Activities");
Id(x => x.Id).ColumnName("ID").GeneratedBy.Guid();
Map(x => x.ActivityName).Not.Nullable().WithLengthOf(50);
HasMany(x => x.ActivityParameters)
.Cascade.Delete()
.KeyColumnNames.Add("ActivityID")
.AsMap("ParameterName")
.AsMap("ParameterValue")
.WithTableName("ActivityParameters");
但我得到一個錯誤,關聯引用未映射的類:System.Object。 :(
稍后編輯:我得到了最新版本的Fluent,現在代碼如下:
Table("Activities");
Id(x => x.Id).Column("ID").GeneratedBy.Guid();
Map(x => x.ActivityName).Not.Nullable().Length(50);
HasMany(x => x.ActivityParameters)
.KeyColumn("ActivityID")
.ForeignKeyCascadeOnDelete()
.Table("ActivityParameters");
實際上你需要定義IDictionary中的value屬性包含哪種對象 - NHibernate不知道如何映射。 您應該使用特定的類而不是。 然后,您也可以為此類指定Mapping。
請原諒我的無知。
大約6個月前我和NHibernate合作過,我們仍然選擇XML集成映射,然后編譯庫中的XML映射或者任何東西。
這是新的直接從代碼中映射關系表和類對象嗎?
我聽說這是通過在方括號內的類的每個元素之上指定映射而實現的實體框架。 因此,由於實體框架僅用於SQL Server,我們無法考慮使用它,因為我們在SQL Server,Oracle和SQLite的多數據庫環境中工作。
感謝關於這個主題的任何照明! :-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.