كيف يمكنني تعيين قاموس باستخدام Automabing Nhibernate بطلاقة؟
-
20-09-2019 - |
سؤال
لدي كيان مثل ذلك:
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
}
لا تنتمي إلى StackOverflow