Проблема отображения отношения один ко многим с EF CTP4 - PullRequest
1 голос
/ 15 ноября 2010

Я пытаюсь определить отношение «один ко многим» между категорией и проектом (у категории может быть один или несколько проектов, у проекта может быть одна категория или нет)

public class Project : Entity {

    public virtual string Title { get; set; }

    public virtual Guid? CategoryId { get; set; }
    public virtual Category Category { get; set; }
}

public class Category : Entity {       
    public virtual string Name { get; set; }
    public virtual ICollection<Project> Projects { get; set; }
}

Я определил следующееmappings:

            modelBuilder.Entity<Project>()
            .MapSingleType(p => new {
                ProjectId = p.Id,
                p.CategoryId,
                p.Title,
                p.Slug,
                p.ShortDescription,
                p.Description,
                p.CreatedOn,
                p.UpdatedOn
            })
            .ToTable("Projects");

        modelBuilder.Entity<Category>()
            .MapSingleType(c => new {
                CategoryId = c.Id,
                c.Name,
                c.CreatedOn,
                c.UpdatedOn
            })
            .ToTable("Categories");

        // relationships
        modelBuilder.Entity<Project>()
            .HasOptional<Category>(p => p.Category)
            .WithMany()
            .HasConstraint((p, c) => p.CategoryId == c.Id);

Теперь, несмотря на то, что это работает нормально, EF все еще генерирует таблицу Categories_Products (используется для многих и многих ассоциаций).

Я отключил инициализатор базы данных по умолчаниювсе же эта таблица все еще генерируется.Что я делаю не так?

Спасибо, Бен

1 Ответ

0 голосов
/ 16 ноября 2010

Я удалил код отображения проекта и категории и позволил EF использовать соглашения по умолчанию для создания базы данных. Это создало отношения, которые я ожидал (один ко многим между категорией и проектом).

Я бы добавил, что единственная причина, по которой я явно определял отображение, заключалась в том, что EF, кажется, не очень хорошо обрабатывает базовые классы. У меня был базовый класс "Entity" с одним свойством "Id", от которого унаследованы все мои объекты. Это вызвало так много проблем с CTP4, что я просто поменял его интерфейсом IEntity. Это все еще давало мне ограничения, которые мне были нужны при работе с общими классами репозитория.

Надеемся, что базовые классы сущностей будут лучше поддерживаться в RTM

...