Внешние ключевые вопросы в EF6 CF

c# ef-code-first ef-fluent-api entity-framework entity-framework-6

Вопрос

Извините меня за то, что я новичок с EF, когда дело доходит до кода. Моя проблема заключается в том, что я не хочу добавлять свойства внешнего ключа к модели, и, согласно MSDN, это не создает проблем с использованием свободного API, однако я не могу понять правильное использование моей текущей ситуации. Это кажется очень простым:

public class Package
{
    public Package()
    {
        Users = new Collection<User>();
    }

    public Int32 Id {get; set;}
    public String Name {get; set;}
    public virtual User Creator {get; set;}

    public virtual ICollection<User> Users {get; set;}
}

public class User
{
    public Int32 Id {get; set;}
    public String Name {get; set;}
}

public class PackageContext : DbContext
{
    public DbSet<Package> Packages {get; set;}

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Package>().HasRequired(p => p.Creator).WithMany();
        modelBuilder.Entity<Package>().HasMany(p => p.Users).WithRequired().Map(c => c.MapKey("PackageId"));

        base.OnModelCreating(modelBuilder);
    }
}

Я пробовал много отличных сочетаний, но ничего не работало правильно. Самое распространенное исключение, которое я получаю, следующее:

System.Data.Entity.Infrastructure.DbUpdateException: Произошла ошибка при сохранении объектов, которые не отображают свойства внешнего ключа для своих отношений. Свойство EntityEntries вернет значение null, потому что один объект не может быть идентифицирован как источник исключения. Обработка исключений при сохранении может быть упрощена путем отображения свойств внешнего ключа в ваших типах объектов.

Может кто-то, пожалуйста, помогите мне разобраться в правильных быстрых звонках, которые мне нужно делать при создании модели?

Принятый ответ

u должен использовать это:

public class Package
{
    public Int32 Id {get; set;}
    public String Name {get; set;}
    public Int32 UserId {get; set;}

    public virtual User Creator {get; set;}    
}

public class User
{
    public User()
    {
        Packages = new Collection<Package>();
     }

    public Int32 Id {get; set;}
    public String Name {get; set;}

    public virtual ICollection<Package> Packages {get; set;}
}

public class PackageContext : DbContext
{
    public DbSet<Package> Packages {get; set;}

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Package>().HasRequired(current => current.Creator)
            .WithMany(c=>c.Packages)
            .HasForeignKey(c=>c.UserId)
            .WillCascadeOnDelete(false);

    base.OnModelCreating(modelBuilder);
    }
}


Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему