Verwenden Sie den Spaltentyp UniqueIdentifier, und [DatabaseGenerated (DatabaseGeneratedOption.Identity)] für den Modellschlüssel funktioniert in EF Code First nicht

Dies ist mein MVC-Modell:

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; }
}

und das istLinkDBContext Klasse:

public class LinkDBContext : DbContext
{
    public DbSet<Link> Links { get; set; }
}

Wenn ich mit diesem Code Daten zur Datenbank hinzufügen möchte:

    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);
    }

Ich bekomme nur eine Ausnahme:Cannot insert the value NULL into column 'ID', table 'GhiasiDB.dbo.Links'; column does not allow nulls. INSERT fails.The statement has been terminated.

Was ist das Problem und wie kann ich es beheben?

aktualisieren

Ich habe den Typ von geändertID vonGuid zuint und als ich es nochmal versuchte bekam ich diese ausnahme vonList<Link> LLinks = Links.Links.ToList<Link>(); vonGetNewID Methode: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'. und ich weiß nicht, woher es kam. Ich habe alles verändertGuides zuint!

Antworten auf die Frage(4)

Ihre Antwort auf die Frage