Entity Framework 4.2 один-ко-многим, без DbSet - PullRequest
1 голос
/ 24 декабря 2011

Я пытаюсь настроить отношения один-ко-многим с EF 4.2, но это просто не сработает. Некоторые данные:

table "BugNet_Projects"
ProjectManagerUserId uniqueidentifier not null

table "aspnet_Users"
UserId uniqueidentifier not null
class Project
{
    [ForeignKey("ProjectManagerUserId")]
    public User ProjectManager { get; set; }
    public Guid ProjectManagerUserId { get; set; }
}

class User
{
    public Guid UserId { get; set; }
}

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Project>().Map(p => p.ToTable("BugNet_Projects"));
    modelBuilder.Entity<User>().Map(u => u.ToTable("aspnet_Users"));
}

Обратите внимание, что таблица сущности User / aspnet_Users не имеет ссылки на проекты. В базе данных есть FK от ProjectManagerUserId до UserId. Когда я запрашиваю проект из контекста (с помощью .Include ("ProjectManager")), свойство ProjectManager всегда имеет значение null. Свойство ProjectManagerUserId правильно заполнено GUID.

Кто-нибудь знает, что я делаю не так?

1 Ответ

0 голосов
/ 24 декабря 2011

Во-первых, ваши навигационные свойства должны быть помечены как виртуальные:

public class Project
{
    [ForeignKey("ProjectManagerUserId")]
    public virtual User ProjectManager { get; set; }
    public Guid ProjectManagerUserId { get; set; }
}

Почему?

Во время выполнения EF 4.2 создает подкласс и переопределяет это свойство для того, чтобы заполнить его из БД (заставляя Включить работу для быстрой загрузки и т. Д.).

...