Как установить свойство внешнего ключа с NOT NULL в нескольких отношениях - PullRequest
1 голос
/ 20 февраля 2012

У меня есть следующие две сущности

public class User
{
        [Key]
        public int Id { get; set; } // PK

        // for many-to-many relation with Booking.Members
        public virtual ICollection<Booking> Bookings { get; set; }
}

public class Booking
{
        public Booking()
        {
            Members = new List<User>();
        }

        public int Id { get; set; } // PK

        [ForeignKey("UserByCreated")]
        public int UserByCreatedId { get; set; } // FK
        public virtual User UserByCreated { get; set; } 

        // for many-to-many relation with User.Bookings
        public virtual ICollection<User> Members { get; set; }

}

Как показано выше, пользователь и резервирование имеют два разных отношения: одно отношение «многие ко многим», а другое отношение «внешний ключ».

Я хочу иметь столбец внешнего ключа UserByCreatedId с условием NOT NULL в таблице бронирований.

Однако, это кажется невозможным из-за других отношений с Пользователем. Есть ли какое-то решение для этого?

1 Ответ

2 голосов
/ 20 февраля 2012

Используйте Fluent API для настройки отношений, поскольку EF не может определить, что связь заканчивается, когда между двумя сущностями существует несколько связей.

Редактировать

UserByCreated отношения должны быть изменены на необязательные, чтобы избежать проблемы множественных путей удаления.

public class Booking
{
        public Booking()
        {
            Members = new List<User>();
        }

        public int Id { get; set; } // PK

        [ForeignKey("UserByCreated")]
        public int? UserByCreatedId { get; set; } // FK

        public virtual User UserByCreated { get; set; } 

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

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<User>().HasMany(u => u.Bookings)
         .WithMany(b => b.Members);
    modelBuilder.Entity<Booking>().HasOptional(u => u.UserByCreated)
         .WithMany()
         .HasForeignKey(b => b.UserByCreatedId)
         .WillCascadeOnDelete(false);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...