سؤال

لدي كيان مثل ذلك:

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

هل يمكن لأحد أن يخبرني بما أفعله خطأ؟ أيضا ، هذا مجرد مثال بسيط. لدي المزيد من القواميس من هذا فقط.

هل كانت مفيدة؟

المحلول

من المستحيل مع nhibernate.

نصائح أخرى

وجدت بعض الآثار التي هذا غير ممكن. بعض الآثار ، ذلك لقد تم تنفيذه مؤخرًا.

لا يزال التحقيق. قون


هذا يبدو واعدا جدا (لم يختبر بعد).

لذلك ، في حالتك يجب أن تبدو =>

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

ضع في اعتبارك - ينبغي. لم أختبره.

حل محتمل يجب أن يعمل من الناحية النظرية مع السيارات:

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
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top