сначала код telerik sheduleview wpf с ядром фреймворка сущности

Я новичок в .net core, вот официальный репозиторий от telerik для первого подхода к коду в представлении по расписанию:

https://github.com/telerik/xaml-sdk/tree/master/ScheduleView/DatabaseEntityFramework

если вы посмотрите на файл DbContext здесь ....

https://github.com/telerik/xaml-sdk/blob/master/ScheduleView/DatabaseEntityFramework/ScheduleViewEntities.cs

вы увидите несколько экземпляров, в которых свободный API использует WithOptional (строки 85 и 90). Читая в Интернете, люди говорят, что если внешний ключ обнуляется, мы можем удалить эти строки, и все будет в порядке. Теперь вот проблема:

      modelBuilder.Entity<TimeMarker>()
                .HasMany(e => e.SqlAppointments)
                .WithOptional(e => e.TimeMarker)
                .HasForeignKey(e => e.TimeMarkerID);

Глядя на класс SqlAppointments, мы имеем следующее:


Я предполагаю, что здесь идентификатор может быть нулевым, поэтому все должно быть в порядке. другой :

      modelBuilder.Entity<TimeMarker>()
                .HasMany(e => e.SqlExceptionAppointments)
                .WithOptional(e => e.TimeMarker)
                .HasForeignKey(e => e.TimeMarkerID);

он строит связь между SqlExceptionAppointments и TimeMarker. Идентификатор для TimeMarker: TimeMarkerId Изучая класс SqlExceptionAppointment, мы имеем:

      public int? TimeMarkerID { get; set; }

public virtual TimeMarker TimeMarker { get; set; }

Итак, я все правильно понял? Если мы настроим эти два определения отношений, например:

      modelBuilder.Entity<TimeMarker>()
                .HasMany(e => e.SqlAppointments)
                .HasForeignKey(e => e.TimeMarkerID);

modelBuilder.Entity<TimeMarker>()
                .HasMany(e => e.SqlExceptionAppointments)
                .HasForeignKey(e => e.TimeMarkerID);

удалив withOptional, используя здесь базу данных MySql, все ли будет работать в ядре Entity Framework?

еще одна большая головная боль, в строке 69 dbcontext у нас есть:

      modelBuilder.Entity<SqlExceptionOccurrence>()
                .HasOptional(e => e.SqlExceptionAppointment)
                .WithRequired(e => e.SqlExceptionOccurrence)
                .WillCascadeOnDelete();

вот основная проблема, глядя на SqlExceptionOccurrence у нас есть:

      public partial class SqlExceptionOccurrence
    {
        [Key]
        public int ExceptionId { get; set; }

        public int MasterSqlAppointmentId { get; set; }

        public DateTime ExceptionDate { get; set; }

        public virtual SqlAppointment SqlAppointment { get; set; }

        public virtual SqlExceptionAppointment SqlExceptionAppointment { get; set; }
    }

и глядя на SqlExceptionAppointment, мы имеем:

      public partial class SqlExceptionAppointment
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public SqlExceptionAppointment()
        {
            SqlExceptionResources = new HashSet<SqlExceptionResource>();
        }

        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public int ExceptionId { get; set; }

        [StringLength(100)]
        public string Subject { get; set; }

        [StringLength(500)]
        public string Body { get; set; }

        public DateTime Start { get; set; }

        public DateTime End { get; set; }

        public bool IsAllDayEvent { get; set; }

        [StringLength(100)]
        public string TimeZoneString { get; set; }

        public int Importance { get; set; }

        public int? TimeMarkerID { get; set; }

        public int? CategoryID { get; set; }

        public virtual Category Category { get; set; }

        public virtual SqlExceptionOccurrence SqlExceptionOccurrence { get; set; }

        public virtual TimeMarker TimeMarker { get; set; }

        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<SqlExceptionResource> SqlExceptionResources { get; set; }
    }

Нет, здесь у нас нет НИКАКОГО внешнего ключа для SqlExceptionOccurrence или SqlExceptionAppointment, похоже, что оба класса используют ExceptionId в качестве своего КЛЮЧА! как обрабатывать этот .HasOptional(e => e.SqlExceptionAppointment) в указанном определении отношения?

Спасибо за вашу помощь

0 ответов

Другие вопросы по тегам