Re[3]: VS2008 валится при data binding+ObjectBinder+Editable
От: ili Россия  
Дата: 15.06.09 08:17
Оценка:
Здравствуйте, albenik, Вы писали:

A>За подсказку про атрибуты спасибо, [NoInstance] спасает и в дизайнере тоже.


да не вопрос, обращайтесь
ток с NoInstance надо оккуратней, у вас в св-ве будет null пока вы его руками не присвоите, и тут есть камень:

public abstract class Parent
{
    public abstract int Id { get; set; }
}

[MapField("ParentId", "Parent.Id")]
public abstract class Child
{
    [NoInstance]
    public abstract Parent Parent { get; set; }
}

[Test]
public void FailTest()
{
    using (DbManager db = new DbManager())
    {
        Child c = db.SetCommand("SELECT 1 AS ParentId").ExecuteObject<Child>();

        Assert.IsNotNull(c.Parent); // FAILS
    }
}

[Test]
public void SuccessTest()
{
    using (DbManager db = new DbManager())
    {
        Child c  = TypeAccessor.CreateInstance<Child>();
        c.Parent = TypeAccessor.CreateInstance<Parent>();

        db.SetCommand("SELECT 1 AS ParentId").ExecuteObject<Child>(c);

        Assert.IsNotNull(c.Parent);      // OK
        Assert.AreEqual(1, c.Parent.Id); // OK
    }
}



A>Другой вопрос, что выпадение студии по мне слишком жесткая реакция даже на криворукость, как, впрочем и переполнение стека из-за неявной рекурсии в реалтайме.

A>По идее в кодогенераторе вполне можно проверять что тип поля такой же как содержащего это поле класса и в getter поля вместо вызова CreateInstanse вставлять Exception типа "Warning possible recurisve call".
A>Так хоть сразу понятно будет где ошибка.

не вариант, тогда вообще подобные струкуры не сделать, а это бывает переодически нужно. вообще подобные вещи очень быстро выявляются, и раз напоровшись, увидев знакомые симптомы проблему решаешь в лет
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.