我有一个像这样的实体:
public class Land
{
public virtual IDictionary<string, int> Damages { get; set; }
// and other properties
}
每次我尝试使用以下代码进行自动化时:
var sessionFactory = Fluently.Configure()
.Database(SQLiteConfiguration.Standard.InMemory)
.Mappings(m => m.AutoMappings.Add(AutoMap.AssemblyOf<Land>))
.BuildSessionFactory();
我收到以下错误:
{"The type or method has 2 generic parameter(s), but 1 generic argument(s) were
provided. A generic argument must be provided for each generic parameter."}
有人可以告诉我我做错了什么吗?此外,这只是一个简单的例子。我有更多的字典而不仅仅是这个。
答案 0 :(得分:9)
NHibernate是不可能的。
答案 1 :(得分:3)
发现了一些isn't possible的痕迹。一些痕迹,it's recently implemented。
仍在调查中。 :)
This looks quite promising(尚未测试)。
因此,在您的情况下,它应该看起来像=&gt;
public class LandMap : ClassMap<Land>
{
public LandMap()
{
(...)
HasMany(x => x.Damages)
.WithTableName("Damages")
.KeyColumnNames.Add("LandId")
.Cascade.All()
.AsMap<string>(
index => index.WithColumn("DamageType").WithType<string>(),
element => element.WithColumn("Amount").WithType<int>()
);
}
}
请记住 - 应该。我没有测试它。
答案 2 :(得分:1)
理论上应该使用自动化的可行解决方法:
public class DamagesDictionary : Dictionary<string, int>
{
}
Land.cs
public class Land
{
public virtual DamagesDictionary Damages { get; set; }
// and other properties
}
或更通用的方法......
public class StringKeyedDictionary<T> : Dictionary<string, T>
{
}
Land.cs
public class Land
{
public virtual StringKeyedDictionary<int> Damages { get; set; }
// and other properties
}