Я изучаю, как использовать EF, и я пытаюсь выполнить первоначальную миграцию создания с использованием ядра EF. Когда я запускаю Update-Database
после запуска Add-Migration InitialCreate
, я получаю сообщение об ошибке:
В базе данных уже есть объект с именем «Клиенты».
В других вопросах SO, касающихся этой проблемы, обычно человек удалял свою базу данных и выполнял первоначальную миграцию, чтобы решить эту проблему. Поскольку это мое первоначальное создание, я не знаю, как действовать дальше.
У меня нет БД с объектом клиентов, поэтому я не уверен, почему EF сообщает мне, что объект с именем «Клиенты» уже существует при попытке создать мою новую БД.
Теперь, хотя я получаю эту ошибку, кажется, что мои таблицы созданы для новой БД, но я не знаю, в чем причина этой ошибки.
Я удалил новую БД и папку Migrations и попытался запустить те же команды, что и раньше, в консоли.
Add-Migration InitialCreate
Update-Database
Я все еще получаю ту же ошибку. Ниже представлены мои модели, контекст и запуск. Любое понимание того, почему я получаю эту ошибку, будет высоко оценено.
Модель клиента
public class Customer
{
[Key]
[DatabaseGenerated( DatabaseGeneratedOption.Identity )]
public int CustomerId { get; set; }
[Required]
[MaxLength( 50 )]
public string FirstName { get; set; }
[MaxLength( 50 )]
public string LastName { get; set; }
[Required]
[EmailAddress]
[MaxLength( 254 )]
public string Email { get; set; }
[Required]
[Phone]
[MaxLength( 15 )]
public string PhoneNumber { get; set; }
public ICollection<LodgingDates> LodgingDates { get; set; } =
new List<LodgingDates>( );
[Required]
public CreditCard CreditCard { get; set; }
[Required]
[MaxLength( 100 )]
public string StreetAddress { get; set; }
[Required]
[MaxLength( 60 )]
public string City { get; set; }
[Required]
[MaxLength( 9 )]
public string PostCode { get; set; }
[Required]
[MaxLength( 55 )]
public string Country { get; set; }
[Required]
[MaxLength( 50 )]
public string StateOrProvince { get; set; }
[Required]
public bool ReceiveEmailNotifications { get; set; }
}
Модель кредитной карты
public class CreditCard
{
[Key]
[DatabaseGenerated( DatabaseGeneratedOption.Identity )]
public int CreditCardId { get; set; }
[Required]
[MaxLength( 19 )]
[CreditCard]
public string AccountNumber { get; set; }
[Required]
[MaxLength( 4 )]
public int Ccv { get; set; }
[Required]
public DateTime ExpirationDate { get; set; }
[Required]
[MaxLength( 100 )]
public string StreetAddress { get; set; }
[Required]
[MaxLength( 60 )]
public string City { get; set; }
[Required]
[MaxLength( 9 )]
public string PostCode { get; set; }
[Required]
[MaxLength( 55 )]
public string Country { get; set; }
[Required]
[MaxLength( 50 )]
public string StateOrProvince { get; set; }
public Customer Customer { get; set; }
public int CustomerId { get; set; }
}
Модель LodgingDates
public class LodgingDates
{
[Key]
[DatabaseGenerated( DatabaseGeneratedOption.Identity )]
public int LodgingDatesId { get; set; }
[Required]
public DateTime CheckInDate { get; set; }
[Required]
public DateTime CheckOutDate { get; set; }
public Customer Customer { get; set; }
public int CustomerId { get; set; }
}
Контекст
public sealed class LodgingCrmContext : DbContext
{
public LodgingCrmContext( DbContextOptions<LodgingCrmContext> options )
: base( options )
{
}
public DbSet<Customer> Customers { get; set; }
public DbSet<CreditCard> CreditCards { get; set; }
public DbSet<LodgingDates> LodgingDates { get; set; }
}
Запуск
public void ConfigureServices( IServiceCollection services )
{
services.AddDbContext<LodgingCrmContext>( options =>
options.UseSqlServer( Configuration.GetConnectionString( "DefaultConnection" ) ) );
}