gpt4 book ai didi

c# - Entity Framework : Adding collection (list, HashSet、字典)到用户对象导致空白迁移

转载 作者:太空宇宙 更新时间:2023-11-03 10:48:44 28 4
gpt4 key购买 nike

我正在尝试使用 MVC4 附带的预建实体网站,并且我正在尝试更改用户对象以包含额外的字段。

如果我在AccountModels.cs中有如下代码

[Table("UserProfile")]
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
public List<string> Test { get; set; }
}

(注意,我添加了 List Test {get;set;})

然后我在程序包管理器控制台中运行以下命令,

Add-Migration "List"
Update-Database

生成的迁移类是这样的。

public partial class List : DbMigration
{
public override void Up()
{
}

public override void Down()
{
}
}

但是,如果我只是将一个标量变量添加到 AccountModels.cs,那么它会出现在生成的迁移类中没有问题,如下所示:

public partial class singleString : DbMigration
{
public override void Up()
{
AddColumn("dbo.UserProfile", "NameList", c => c.String());
}

public override void Down()
{
DropColumn("dbo.UserProfile", "NameList");
}
}

为什么当我尝试添加一个集合时它不起作用?

最佳答案

您希望 Entity Framework 如何映射 List<string> .字符串不会映射到任何数据库表。它只是一个字符串。如果您将它更改为一个类,那么它会为其创建一个迁移。

Entity Framework 对待ICollection<T>作为一对多关系(除非关系的另一端有一个集合)。由于您使用的是字符串,因此它不会将其视为任何合理的数据库映射,因为它无法将字符串映射到表。如果您添加了如下新类:

[Table("UserAddress")]
public class UserAddress
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserAddressId{ get; set; }

// foreign key to UserProfile
public int UserProfileId { get; set; }
// navigation property to UserProfile
public UserProfile Profile { get; set; }

public string AddressLine1 { get; set; }
public string AddressLine2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string ZipCode { get; set; }
}

现在,如果您要更改 UserProfile 以包含地址:

 public List<UserAddress> Addresses { get; set; }

EF 将创建一个迁移,添加一个在 UserProfile 和 UserAddress 之间具有一对多关系的新表。

关于c# - Entity Framework : Adding collection (list, HashSet、字典)到用户对象导致空白迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22331007/

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