Вопрос об отношениях EF в MVC3 - PullRequest
0 голосов
/ 09 февраля 2012

Я получил следующие коды:

public class Trip
{
    public int TripId { get; set; }

    public int DriverId { get; set; }

    public string StartingPoint { get; set; }

    public string Destination { get; set; }

    public DateTime TimeDepart { get; set; }

    public int SeatAvailable { get; set; }

    public virtual Carpooler Carpooler { get; set; }

    public virtual ICollection<Passenger> Passengers { get; set; }
}

public class Driver
{
    public int DriverId { get; set; }

    public int TripId { get; set; }

    public virtual Trip Trip { get; set; }
}

public class Passenger
{
    public int PassengerId { get; set; }

    public int TripId { get; set; }

    public virtual Trip Trip { get; set; }
}

Строитель модели:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {

        //one-to-one between Trip and Carpooler
        modelBuilder.Entity<Trip>()
            .HasRequired(x => x.Carpooler)
            .WithRequiredDependent();
        modelBuilder.Entity<Carpooler>()
            .HasRequired(x => x.Trip)
            .WithRequiredPrincipal();
        base.OnModelCreating(modelBuilder);

        //zero or one-to-many between Trip and Passenger
        modelBuilder.Entity<Trip>()
        .HasOptional(x => x.Passengers);

        modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
    }

Инициализатор:

Database.SetInitializer<LiveGreenContext>(new CarpoolTripInitializer());

И я получаю следующую ошибку:Кратность недопустима в роли «Trip_Driver_Target» в отношении «Trip_Driver».Поскольку свойства зависимой роли не являются ключевыми свойствами, верхняя граница кратности зависимой роли должна быть *.

Есть ли решение проблемы?Спасибо!

1 Ответ

0 голосов
/ 09 февраля 2012

Настройте отношения между Trip и DriverTrip есть свойство DriverId, которое не настроено.Если вы намереваетесь использовать это как навигационное свойство, вам также необходимо настроить его.

Некоторые настройки были неполными в вашем методе OnModelCreating и исправлены.

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Driver>()
        .HasRequired(x => x.Trip)
        .WithMany()
        .HasForeignKey(x => x.TripId);

    //one-to-one between Trip and Carpooler
    modelBuilder.Entity<Trip>()
        .HasRequired(x => x.Carpooler)
        .WithRequiredDependent();

    modelBuilder.Entity<Carpooler>()
        .HasRequired(x => x.Trip)
        .WithRequiredPrincipal();

    //zero or one-to-many between Trip and Passenger
    modelBuilder.Entity<Trip>()
    .HasMany(x => x.Passengers)
    .WithRequired(x => x.Trip)
    .HasForeignKey(x => x.TripId);

    base.OnModelCreating(modelBuilder);

    modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...