2

这是我的 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.

有什么问题,我该如何解决?


更新

我将 from 的类型更改为IDto Guidint当我再次尝试时,我从List<Link> LLinks = Links.Links.ToList<Link>();ofGetNewID方法中得到了这个异常: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的 es都改成了int!

4

4 回答 4

2

如果您允许 EF 生成表,它将创建 PK 并将默认值设置为(newid()). 如果您先设计了数据库,则可以手动设置它。

于 2012-06-11T08:07:32.693 回答
2

如果表在添加之前已经存在[DatabaseGenerated(DatabaseGeneratedOption.Identity)],则删除DbSet,运行Update-DatabaseDbSet再次添加,最后运行另一个Update-Database

至少那是为我解决的问题。

于 2013-02-14T12:37:26.327 回答
0

我认为那是因为GuidIdentity不兼容。您如何看待自动增加 Guid?

也许改成Id可以int帮助你

于 2012-06-11T07:59:16.347 回答
0

Guid是结构类型,即值类型。您不能将 null 分配给值类型。如果你想要这个,那么你可以在输入声明后使用“ ? ”。

  public Guid? ID { get; set; }

如果这仍然没有帮助,请尝试int

于 2012-06-11T08:03:10.183 回答