Аргументы типа не могут быть выведены из использования.Попробуйте указать аргументы типа явно.Отсутствует потенциальная обработка исключений - PullRequest
0 голосов
/ 20 марта 2019

У меня есть веб-приложение, которое вызывает ошибку при входе в систему при вызове функции EF OnModelCreating. Внутри цикла foreach, содержащегося во фрагменте кода BaseDbContext.cs ниже.

modelBuilder.Configurations.Add(configurationInstance)

Из того, что я могу сказать, typesToRegister является парой ключ / значение, где список 90 сборок перечислен в представлении результатов. После анализа представления результатов есть 80 пар ключ / значение, которые, кажется, нормально загружаются, но пункты с 81 по 90 - это то место, где исключение начинает создаваться. Вот где значение ключевого поля: Name = "<>C".

Пример действительной записи:

{Name = "PayableMap" FullName = "Galaxy.DatabaseMapping.Accounting.PayableMap"}

Пример записи исключения:

{Name = "<>c" FullName = "Galaxy.DatabaseMapping.Security.GroupMap+<>c"}

Я попытался добавить if(!type.Name != "<>C") в цикле foreach, но это не сработало. Я пытался найти этот результат в Интернете, но безуспешно. Кто-нибудь знает, почему typesToRegister, кажется, имеет недопустимые записи? Является ли это проблемой, которую мне нужно переплыть вверх по течению, чтобы выяснить, почему typesToRegister загружает неправильные значения, или мне просто нужно добавить правильную обработку исключений? Примечание: я не могу войти в код, который заполняет typesToRegister.

SecurityDataContext.cs

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        RunConventions(modelBuilder, typeof(GalaxyUserMap));
    }

BaseDbContext.cs

    public void RunConventions(DbModelBuilder modelBuilder, Type assemblyClassType)
    {
        // Change default conventions for cascade deletes
        modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();

        // Id property in everyclass is named class + Id  (i.e CustomerId, JobId, VendorId)
        // Id is always first column in table
        // Could also explicitly determine as key using .Configure(p => p.IsKey() but EF already looks for property of name Id as primary key
        modelBuilder.Properties()
          .Where(p => p.Name == "Id")
          .Configure(p => p.HasColumnOrder(0).HasColumnName((p.ClrPropertyInfo.ReflectedType == null ? "" : p.ClrPropertyInfo.ReflectedType.Name) + "Id"));

        // Add Domain Entity Mapping Configurations
        var typesToRegister = Assembly.GetAssembly(assemblyClassType).GetTypes()
          .Where(type => type.Namespace != null);
        foreach (Type type in typesToRegister)
        {
            dynamic configurationInstance = Activator.CreateInstance(type);
            modelBuilder.Configurations.Add(configurationInstance); // The error occurs here.
        }
    } 

GalaxUserMap.cs

   public class GalaxyUserMap : EntityTypeConfiguration<GalaxyUser>
    {
        public GalaxyUserMap()
        {
            Property(galaxyUser => galaxyUser.Id).HasColumnName("UserId");
            HasOptional(galaxyUser => galaxyUser.DeactivatedBy)
                .WithMany()
                .HasForeignKey(galaxyUser => galaxyUser.DeactivatedById);
            HasOptional(galaxyUser => galaxyUser.CustomerInvoiceSearchCriteria).WithRequired(userCustomerInvoiceCriteria => userCustomerInvoiceCriteria.User);
            HasOptional(galaxyUser => galaxyUser.JobSearchCriteria).WithRequired(userJobSearchCriteria => userJobSearchCriteria.User);
            HasOptional(galaxyUser => galaxyUser.VendorSearchCriteria).WithRequired(userVendorSearchCriteria => userVendorSearchCriteria.User);
            HasOptional(galaxyUser => galaxyUser.CustomerSearchCriteria).WithRequired(userCustomerSearchCriteria => userCustomerSearchCriteria.User);
            HasOptional(galaxyUser => galaxyUser.CustomerContactSearchCriteria).WithRequired(customerContactUserSearchCriteria => customerContactUserSearchCriteria.User);
            HasOptional(galaxyUser => galaxyUser.PayableSearchCriteria).WithRequired(payableSearchCriteria => payableSearchCriteria.User);
            HasOptional(galaxyUser => galaxyUser.ReceiptSearchCriteria).WithRequired(receiptSearchCriteria => receiptSearchCriteria.User);
            Ignore(galaxyUser => galaxyUser.Status);
            ToTable(DatabaseConstants.GalaxyUsersTableName);
        }
    }

GalaxyUser.cs

    public class GalaxyUser : Person
    {
        public virtual GalaxyUserCustomerInvoiceSearchCriteria CustomerInvoiceSearchCriteria { get; set; }
        public virtual GalaxyUserJobSearchCriteria JobSearchCriteria { get; set; }
        public virtual GalaxyUserPayableSearchCriteria PayableSearchCriteria { get; set; }
        public virtual GalaxyUserReceiptSearchCriteria ReceiptSearchCriteria { get; set; }
        public virtual GalaxyUserCustomerSearchCriteria CustomerSearchCriteria { get; set; }
        public virtual GalaxyUserCustomerContactSearchCriteria CustomerContactSearchCriteria { get; set; }
        public virtual GalaxyUserVendorSearchCriteria VendorSearchCriteria { get; set; }
        public bool IsVendorHeaderCollapsed { get; set; }
        public bool IsCustomerHeaderCollapsed { get; set; }
        public bool IsJobHeaderCollapsed { get; set; }
        public int JobMilestonesWorklistDaysOut { get; set; }
        public int JobItemsWorklistDaysOut { get; set; }
        public int JobsWorklistDaysOut { get; set; }
        public int? DeactivatedById { get; set; }
        public virtual GalaxyUser DeactivatedBy { get; set; }
        public DateTime? DeactivatedDate { get; set; }
        public PersonStatusTypes Status { get { return DeactivatedDate.HasValue ? PersonStatusTypes.Inactive : PersonStatusTypes.Active; } }

        public bool IsSystemAdmin {
            get { return RoleNames.Contains(Roles.Administer_System); }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...