C#でdb4oを使い始めたばかりですが、DBでUniqueConstraintを設定するのに問題があります。
これがdb4oの設定です
static IObjectContainer db = Db4oEmbedded.OpenFile(dbase.Configuration(), "data.db4o");
static IEmbeddedConfiguration Configuration()
{
IEmbeddedConfiguration dbConfig = Db4oEmbedded.NewConfiguration();
// Initialize Replication
dbConfig.File.GenerateUUIDs = ConfigScope.Globally;
dbConfig.File.GenerateVersionNumbers = ConfigScope.Globally;
// Initialize Indexes
dbConfig.Common.ObjectClass(typeof(DAObs.Environment)).ObjectField("Key").Indexed(true);
dbConfig.Common.Add(new Db4objects.Db4o.Constraints.UniqueFieldValueConstraint(typeof(DAObs.Environment), "Key"));
return dbConfig;
}
およびシリアル化するオブジェクト:
class Environment
{
public string Key { get; set; }
public string Value { get; set; }
}
いくつかの値をコミットするたびに、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」。例外がポップアップし、UniqueFieldValueConstraintを指すスタックトレースが表示されます。また、「Initialize Indexes」コメントの後の2行をコメントアウトすると、すべてが正常に実行されます(問題である、一意でないキーを保存できる場合を除く)〜
コミットコード(この部分でも何か間違ったことをしている場合:)
public static void Create(string key, string value)
{
try
{
db.Store(new DAObs.Environment() { Key = key, Value = value });
db.Commit();
}
catch (Db4objects.Db4o.Events.EventException ex)
{
System.Console.WriteLine
(DateTime.Now + " :: Environment.Create\n" + ex.InnerException.Message +"\n" + ex.InnerException.StackTrace);
db.Rollback();
}
}
助けてください?よろしくお願いします〜