Данные, связанные с EF, не сохраняются в базе данных - PullRequest
0 голосов
/ 13 июня 2011

Использование следующих классов по соглашению EF будет правильно создавать таблицы и ассоциации PK / FK.Однако, когда я добавляю данные в коллекцию фотографий и сохраняю объекты, данные в таблице «Фотографии» не сохраняются в таблице базы данных.

Я избегаю использования любых типов коллекций, которые наследуются от ICollection для открытого свойства, и вместо этого я использую частное вспомогательное поле, поскольку я хочу контролировать доступ к методам Add / Remove.Есть ли что-то еще, что мне нужно добавить в OnModelCreating, чтобы сообщить EF, что в IEnumerable Photos есть данные и сохранить их?

(Данные из класса Album могут быть сохранены правильно)

public class Album
{
    private readonly ICollection<Photo> _photos = new List<Photo>();
    public Guid Id {get; set;}      
    public string Name {get; set;}
    public virtual IEnumerable<Photo> Photos
    {
        get{ return _photos;}
    }

    public void AddPhoto(byte[] bytes, string name)
    {
        //some biz rules
        Photo p = new Photo();
        p.Bytes = bytes;
        p.Name = name;
        _photos.Add(p);
    }
}

public class Photo
{
    public Guid Id {get; set;}
    public string Name {get; set;}
    public byte[] Bytes {get; set;}
}

public class AlbumDbContext : DbContext
{
    public AlbumDbContext()
    {
        this.Database.CreateIfNotExists();
    }

    public DbSet<Album> Albums { get; set; }        


    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {              
    }
}

1 Ответ

2 голосов
/ 13 июня 2011

Мне даже интересно, что таблицы и отношения созданы правильно, особенно когда ни один из ваших объектов не определил ключ, а контекст не определил набор для Photos.В любом случае ICollection<T> является обязательным .Ваш класс не является допустимым объектом, и даже если вы каким-то образом заставите его работать, я ожидаю, что у вас будут проблемы с его использованием - например, вы можете забыть о отложенной загрузке.

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

Единственный способ, который может работать:1013 *

Это решение довольно уродливо, потому что оно делает вашу сущность зависимой от структуры сущности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...