C# 首先对主键实体框架代码使用字符串

C# 首先对主键实体框架代码使用字符串,c#,sql-server,entity-framework,ef-code-first,C#,Sql Server,Entity Framework,Ef Code First,我看到了这个参考: 这些细节基本上和我的问题相同。 运行更新数据库命令 导致以下错误: “标识列“FormId”的数据类型必须为int、bigint、smallint、tinyint、decimal或numeric,小数位数为0,未加密,并限制为不可为空。” 我添加了属性,正如上面的引用所述,并确保没有任何标识属性与我尝试使用的数据库中的该列相关联,在进行这些更改后,我仍然会收到相同的错误消息 听到我错过了什么,我真是摸不着头脑。我还没能从搜索中找到任何其他修复。非常感谢您的帮助 public

我看到了这个参考:

这些细节基本上和我的问题相同。 运行更新数据库命令 导致以下错误:

“标识列“FormId”的数据类型必须为int、bigint、smallint、tinyint、decimal或numeric,小数位数为0,未加密,并限制为不可为空。”

我添加了属性,正如上面的引用所述,并确保没有任何标识属性与我尝试使用的数据库中的该列相关联,在进行这些更改后,我仍然会收到相同的错误消息

听到我错过了什么,我真是摸不着头脑。我还没能从搜索中找到任何其他修复。非常感谢您的帮助

public class Form
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public string FormId { get; set; }
    [Required]
    public string Name { get; set; }
    [Required]
    public string Description { get; set; }
    public string Url { get; set; }
}

public class UserForm
{
    public string UserFormId { get; set; }
    public bool IsComplete { get; set; }
    public virtual ApplicationUser ApplicationUser { get; set; }
    public Form Form { get; set; }

}

尝试添加显式ForeignKey

比如:

public class UserForm
{
    public string UserFormId { get; set; }
    public bool IsComplete { get; set; }
    public virtual ApplicationUser ApplicationUser { get; set; }
    public string FormId {get;set;}
    [ForeignKey("FormId")]
    public Form Form { get; set; }
}

我试着用string
FormId
创建两个与您的模型相对应的表,所有这些都正常工作。我建议您不要第一次创建表,而是将
FormId
从以前的类型(我认为是
int
type)更改为新的
string
类型。如果是这样的话,在迁移时,您可以看到
AlterColumn
FormId
列相对,它们试图将
FormId
转换为新类型,但这是不可能的,因为它们不兼容。相反,
AlterColumn
DropColumn
AddColumn
组合使用。看一看非常相似的情况(我假设),其中尝试将PK从
int
更改为
Guid
类型。

您可以向我们展示您的代码吗?@DavidG:我添加了我正在使用的特定类,这会引发问题。您是否为该键定义了任何外键关系?是的,我添加了引用上述表单类的类。该类是否也需要一些关联的数据属性?UserForm有一个外键,该外键将引用表单的FormId。这生成了一个新错误:类型“WisconsinTrackClubWebsite.Models.UserForm”的属性“Form”上的ForeignKeyAttribute无效。在依赖类型“WisconsinTrackClubWebsite.Models.UserForm”上未找到外键名称“FormId”。名称值应该是一个以逗号分隔的外键属性名称列表。这似乎已经做到了,感谢提示和参考!