C# 首先对主键实体框架代码使用字符串
我看到了这个参考: 这些细节基本上和我的问题相同。 运行更新数据库命令 导致以下错误: “标识列“FormId”的数据类型必须为int、bigint、smallint、tinyint、decimal或numeric,小数位数为0,未加密,并限制为不可为空。” 我添加了属性,正如上面的引用所述,并确保没有任何标识属性与我尝试使用的数据库中的该列相关联,在进行这些更改后,我仍然会收到相同的错误消息 听到我错过了什么,我真是摸不着头脑。我还没能从搜索中找到任何其他修复。非常感谢您的帮助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
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”。名称值应该是一个以逗号分隔的外键属性名称列表。这似乎已经做到了,感谢提示和参考!