2010-03-28 3 views
3

Я только начал использовать db4o на C#, и я с устанавливающее UniqueConstraint на БД проблема ..UniqueConstraint в EmbeddedConfiguration

вот конфигурация 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. Кроме того, когда я комментирую две строки после комментария «Инициализировать индексы», все работает нормально (кроме сохранения не уникальных ключей, что является проблемой).

Код сделки (в случае, если я что-то делаю неправильно в этой части тоже:

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

Помогите пожалуйста? Заранее спасибо ~

ответ

2

Я забыл, что C# использует странные поля аккомпанемента для ярлыков свойств :(Обновление конфигурации к следующему: в настоящее время штраф

// Initialize Indexes 
dbConfig.Common.ObjectClass(typeof(DAObs.Environment)) 
    .ObjectField("<Key>k__BackingField").Indexed(true); 
dbConfig.Common.Add(new Db4objects.Db4o.Constraints. 
    UniqueFieldValueConstraint(typeof(DAObs.Environment), "<Key>k__BackingField")); 

Все работает ~ ^^

+0

+2 Спасибо Я использую Java. Является ли Java затронутым полями поддержки? – Viet

+0

Есть ли у Java свойства вообще? Является ли Java не использующим все эти методы getter и setter, или я отстаю на несколько лет? – mnemosyn

+1

Спасибо за эту тему и ответ с "трюком" – binball

Смежные вопросы