gpt4 book ai didi

c# - Entity Framework Core 初始迁移时对象已存在

转载 作者:行者123 更新时间:2023-11-30 14:06:38 25 4
gpt4 key购买 nike

我正在学习如何使用 EF,并且正在尝试使用 EF 核心进行初始创建迁移。当我在运行 Add-Migration InitialCreate 之后运行 Update-Database 时,我收到一个错误:

There is already an object named 'Customers' in the database.

关于此问题的其他 SO 问题通常要求此人删除他们的数据库并进行初始迁移以解决此问题。因为这是我的初始创建,所以我不确定如何继续。

我没有包含客户对象的数据库,所以我不确定为什么 EF 在尝试创建我的新数据库时告诉我已经有一个名为“客户”的对象。

现在虽然我收到此错误,但我的表似乎是为新数据库创建的,但我不知道此错误的原因是什么。

我删除了新数据库和 Migrations 文件夹,并尝试在控制台中运行与之前相同的命令。

添加迁移 InitialCreate更新数据库

我仍然收到同样的错误。以下是我的模型、上下文和启动。如果能深入了解我收到此错误的原因,我们将不胜感激。

客户模型

 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" ) ) );
}

最佳答案

好的,我明白了。

我重新启动 VS 并导航到 LodgingCrmContext 并注意到构造函数中有 Database.EnsureCreated( );。这是我今天早些时候删除的东西。但是当我重新启动 VS 时,它又在 ctor 中了(很奇怪)。

删除 Database.EnsureCreated( ); 并重建后,我的初始创建迁移就成功了。

Database.EnsureCreated( ); 导致 Customers 表被创建两次。这也可以解释为什么要创建数据库(使用正确的表)以及为什么我会看到:

There is already an object named 'Customers' in the database.

关于c# - Entity Framework Core 初始迁移时对象已存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46504245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com