使用 UniqueIdentifier 列类型和 [DatabaseGenerated (DatabaseGenerat
本文关键字:DatabaseGenerated DatabaseGenerat UniqueIdentifier 类型 使用 | 更新日期: 2023-09-27 18:36:50
这是我的MVC模型:
public class Link
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid ID { get; set; }
[DisplayName("Shorted URL")]
public string SURL { get; set; }
[DisplayName("General Link")]
public string OriginalURL { get; set; }
[DisplayName("Click Count")]
public int ClickCount { get; set; }
}
这是LinkDBContext
类:
public class LinkDBContext : DbContext
{
public DbSet<Link> Links { get; set; }
}
当我想使用以下代码向数据库添加一些数据时:
private string GetNewID(string url, string id)
{
LinkDBContext Links = new LinkDBContext();
//id = "http://" + id;
List<Link> link = Links.Links.Where(a => (a.OriginalURL == id && a.SURL == id)).ToList();
if (link.Count == 0)
{
List<Link> LLinks = Links.Links.ToList<Link>();
Link li = new Link();
//li.ID = new Guid();
li.ClickCount = 0;
li.SURL = id;
li.OriginalURL = url;
Links.Links.Add(li);
Links.SaveChanges();
Links.Dispose();
return id.ToString();
}
return GetNewID(url);
}
我只是得到一个例外:Cannot insert the value NULL into column 'ID', table 'GhiasiDB.dbo.Links'; column does not allow nulls. INSERT fails.The statement has been terminated.
问题是什么,我该如何解决?
更新
我将ID
的类型从 Guid
更改为 int
,当我再次尝试时,我从GetNewID
方法List<Link> LLinks = Links.Links.ToList<Link>();
中得到了这个异常:The 'ID' property on 'Link' could not be set to a 'Guid' value. You must set this property to a non-null value of type 'Int32'.
我不知道它是从哪里来的。我把所有Guid
都改成了int
!
如果允许 EF 生成表,它将创建默认值设置为 (newid())
的 PK。如果先设计了数据库,则可以手动设置它。
如果表在添加[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
之前已经存在,则删除DbSet
,运行Update-Database
,再次添加DbSet
,最后运行另一个Update-Database
。
至少这就是为我修复它的原因。
我认为这是因为Guid
和身份不兼容。您如何看待自动递增 Guid?
也许将Id
更改为int
可以帮助您
Guid 是结构类型,即值类型。不能将 null 分配给值类型。如果你想要这个,在这种情况下,你可以在声明中键入后使用"?"。
public Guid? ID { get; set; }
如果这仍然没有帮助,请尝试 int