Атрибут Замок ActiveRecord HasMany - PullRequest
0 голосов
/ 13 мая 2011

Я использую Castle ActiveRecord для реорганизации доступа к нашей базе данных. Я работал над примером из блога / поста, чтобы понять, как это делается, но у меня есть один важный вопрос, касающийся атрибута HasMany. Смотрите следующий пример:

Блог класса:

[ActiveRecord]
public class Blog : ActiveRecordBase
{
    private int id;
    private IList posts = new ArrayList();

    public Blog()
    {
    }

    [PrimaryKey]
    public int Id
    {
        get { return id; }
        set { id = value; }
    }

    [HasMany(typeof(Post), Table="Posts", ColumnKey="blogid", 
        Inverse=true, Cascade=ManyRelationCascadeEnum.AllDeleteOrphan)]
    public IList Posts
    {
        get { return posts; }
        set { posts = value; }
    }
}

Класс Сообщение:

[ActiveRecord]
public class Post : ActiveRecordBase
{
    private int id;
    private String contents;
    private Blog blog;

    public Post()
    {
    }

    [PrimaryKey]
    public int Id
    {
        get { return id; }
        set { id = value; }
    }

    [Property(ColumnType="StringClob")]
    public String Contents
    {
        get { return contents; }
        set { contents = value; }
    }

    [BelongsTo("blogid")]
    public Blog Blog
    {
        get { return blog; }
        set { blog = value; }
    }
}

Когда я сейчас создаю блог и добавляю в него некоторые сообщения, почему коллекция Blog.Posts не обновляется автоматически? Это код:

using (new SessionScope())
{
    Blog b = new Blog();
    b.Save();

    Post p = new Post();
    p.Blog = b;
    p.Save();

    //Here, b.Posts is empty, but shouldn't it contain a reference to p?
}

Что можно сделать, чтобы предотвратить такое поведение? Нужно ли добавлять запись в коллекцию вручную? Каковы лучшие практики здесь?

ТИА

1 Ответ

2 голосов
/ 13 мая 2011

Вам просто нужно добавить свое сообщение в свойство Posts вашего объекта блога

using (new SessionScope())
{
    Blog b = new Blog();

    Post p = new Post();
    p.Blog = b;

    b.Posts.Add(p);

    b.Save();
}

Коллекция сообщений не обновляется автоматически, если вы не перезагрузите свой объект блога из базы данных.

...