使用模型的关键uniqueidentifier列类型和[DatabaseGenerated(Data

2019-07-29 20:40发布

这是我的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. Cannot insert the value NULL into column 'ID', table 'GhiasiDB.dbo.Links'; column does not allow nulls. INSERT fails.The statement has been terminated.

这是什么问题以及如何解决它?


更新

我改变的类型IDGuidint ,当我试图再次我从这个例外List<Link> LLinks = Links.Links.ToList<Link>();GetNewID方法: 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'. 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

Answer 1:

如果你允许EF生成的表将被设置为默认值创建PK (newid()) 如果你先设计数据库时,可以手动设置。



Answer 2:

如果表添加之前已经存在[DatabaseGenerated(DatabaseGeneratedOption.Identity)] ,然后取出DbSet ,运行Update-Database ,添加DbSet一遍,最后运行其他Update-Database

至少,这是什么固定的对我来说。



Answer 3:

我认为这是因为Guid身份是不兼容的。 您如何看待自动递增的Guid?

也许改变Idint可以帮助你



Answer 4:

GUID是结构类型,即值类型。 您不能分配到空值类型。 如果你想要这个比你可以声明类型后,使用“?”的话。

  public Guid? ID { get; set; }

如果仍然没有帮助,尝试一个int



文章来源: Use UniqueIdentifier column type and [DatabaseGenerated(DatabaseGeneratedOption.Identity)] for model's key doesn't work in EF Code First