Member 14016764 Ответов: 2

Мой код не обновляет базу данных


Номер Ошибки:2705,Состояние:4,Класс:16
Имена столбцов в каждой таблице должны быть уникальными. Имя столбца "IsActive" в таблице " dbo.Зачисления указываются более одного раза.


l попробуйте обновить - databas и l получил ошибку ниже

[РЕДАКТИРОВАТЬ]
Убрали весь вид и ASP.NET код как таковой не имеет никакого отношения к ошибке.

модели как
namespace StudentEnrollment.Models
{
public class Course
{

[Display(Name = "Course ID")]
public virtual int Id { get; set; }

  
[Display(Name = "Course Title")]
[Required(ErrorMessage = "Enter Title for course")]
[MaxLength(50, ErrorMessage = "Allowable max is 150")]
public virtual string Title { get; set; }

  
[Display(Name = "Description")]
public virtual string Description { get; set; }

  
[Display(Name = "Number of Credits")]
[Required(ErrorMessage = "Enter credits for course")]
[RegularExpression("^[1-4]{1}$", ErrorMessage = "Enter value either 1,2 or 3,4")]
public virtual string Credits { get; set; }
  
}
}

namespace StudentEnrollment.Models
{
public class Enrollment
{
public virtual int Id { get; set; }

[Display(Name = "Student ID")]
public virtual int StudentId { get; set; }
public Student Student { get; set; }

[Display(Name = "Course ID")]
public virtual int CourseId { get; set; }

public Course Course { get; set; }

[Display(Name = "Grade")]
[RegularExpression("^[A-F]{1}$", ErrorMessage = "Enter value A , B, C, D, E, F")]
public virtual string Grade { get; set; }
public bool IsActive { get; set; }

[Display(Name = "Assigned Campus")]
[Required(ErrorMessage = "Enter value for campus")]
public virtual string AssignedCampus { get; set; }

  
[Display(Name = "Enrolled in Semester")]
[Required(ErrorMessage = "Enter enrollment semester")]
public virtual string EnrollmentSemester { get; set; }


[Display(Name = "Enrollment Year")]  
[Required(ErrorMessage = "Enter value for Enrollment Year ")]
[Range(2018,2020, ErrorMessage = "Enter value greater than 2018")]
public virtual int EnrollmentYear { get; set; }
public virtual String Notes { get; set; }
}
}

namespace StudentEnrollment.Models
{
public class Student
{
[Display(Name = "Student ID")]
public virtual int Id { get; set; }

[Display(Name = "Last Name")]
[Required(ErrorMessage = "Enter value for Last Name")]
[MaxLength(50, ErrorMessage = "Allowable max is 50")]
public virtual string LastName { get; set; }


[Display(Name = "First Name")]
[Required(ErrorMessage = "Enter value for First Name")]
[MaxLength(50, ErrorMessage = "Allowable max length is 50")]
public virtual string FirstName { get; set; }
}
}

есть еще одна ошибка

в System.Data.Entity.Миграции.MigrationsDomainCommand.Выполнить(команда действия) ClientConnectionId:5f388873-4c88-4dfa-96ec-5412a7dfdcce номер ошибки:2705, состояние:4,класс:16 имена столбцов в каждой таблице должны быть уникальными. Имя столбца IsActive в таблице dbo. Зачисление указывается более одного раза. PM>

Есть ли решение в виде запроса внутри таблицы для решения этих проблем????

это запрос enrollemnt
CREATE TABLE [dbo].[Enrollments] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[StudentId] INT NOT NULL,
[CourseId] INT NOT NULL,
[Grade] NVARCHAR (MAX) NULL,
[IsActive] BIT NULL,
[AssignedCampus] VARCHAR (MAX) NULL,
[EnrollmentSemester] VARCHAR (MAX) NULL,
[EnrollmentYear] INT NULL,
CONSTRAINT [PK_dbo.Enrollments] PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [FK_dbo.Enrollments_dbo.Courses_CourseId] FOREIGN KEY ([CourseId]) REFERENCES [dbo].[Courses] ([Id]) ON DELETE CASCADE,
CONSTRAINT [FK_dbo.Enrollments_dbo.Students_StudentId] FOREIGN KEY ([StudentId]) REFERENCES [dbo].[Students] ([Id]) ON DELETE CASCADE
);


GO
CREATE NONCLUSTERED INDEX [IX_StudentId]
ON [dbo].[Enrollments]([StudentId] ASC);


GO
CREATE NONCLUSTERED INDEX [IX_CourseId]
ON [dbo].[Enrollments]([CourseId] ASC);

Показать текст изображения

Что я уже пробовал:

l действительно пробовал обновить базу данных с помощью visual studio 2017, но она продолжает генерировать одну и ту же ошибку активна более чем одна, а также столбец Notes недопустим
это сообщение об ошибке
Номер Ошибки:2705,Состояние:4,Класс:16
Имена столбцов в каждой таблице должны быть уникальными. Имя столбца "IsActive" в таблице " dbo.Зачисления указываются более одного раза.
PM>

Richard MacCutchan

Сообщение об ошибке совершенно ясно; что вы не понимаете?

ZurdoDev

OP использует Entity Framework, что означает, что они не писали код для INSERT/UPDATE, а фреймворк.

Richard MacCutchan

Но они все равно сделали базовый дизайн. И нет смысла использовать фреймворк, если вы не понимаете, что происходит внутри него.

ZurdoDev

Вероятно, у вас где-то есть какой-то код, вызывающий SQL, или ваша модель испорчена. Может быть, обновить свою модель?

2 Ответов

Рейтинг:
2

Dave Kreskowiak

Проблемы связаны с вашими моделями баз данных

Я удалил все атрибуты для ясности

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

namespace StudentEnrollment.Models
{
	public class Student
	{
		public int StudentId { get; set; }
		public string LastName { get; set; }
		public string FirstName { get; set; }
	}
}


Ваша модель курса имеет те же проблемы. Все виртуальное, когда этого не должно быть.
namespace StudentEnrollment.Models
{
	public class Course
	{
		public int CourseId { get; set; }
		public string Title { get; set; }
		public string Description { get; set; }
		public string Credits { get; set; }
	}
}


Теперь ваша модель регистрации имеет аналогичную проблему. Все, что является виртуальным, не должно быть, и то, что не является виртуальным, должно быть! Кроме того, вам не нужны поля StudentId и CourseID. Они будут генерироваться EF по мере необходимости.
namespace StudentEnrollment.Models
{
	public class Enrollment
	{
		public int EnrollmentId { get; set; }
		public string Grade { get; set; }
		public bool IsActive { get; set; }
		public string AssignedCampus { get; set; }
		public string EnrollmentSemester { get; set; }
		public int EnrollmentYear { get; set; }
		public String Notes { get; set; }

		public virtual Student Student { get; set; }
		public virtual Course Course { get; set; }
	}
}


Рейтинг:
2

Member 14016764

Спасибо за ваш ответ я думал что он был виртуальным