[英]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.