2

我有一个像这样的实体:

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."}

有人可以告诉我我做错了什么吗?此外,这只是一个简单的例子。我的字典比这本要多得多。

4

3 回答 3

8

NHibernate 是不可能的。

于 2009-12-30T09:28:30.560 回答
3

发现了一些不可能的痕迹。一些痕迹,它是最近实施的

还在调查。:)


这看起来很有希望(尚未测试)。

所以,在你的情况下,它应该看起来像=>

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>()
            );
    }
}

请记住 - 它应该。我没有测试它。

于 2009-12-23T23:09:43.683 回答
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
}
于 2010-09-29T06:55:27.683 回答