首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架6 Guid生成null?

实体框架6 Guid生成null?
EN

Stack Overflow用户
提问于 2014-12-28 20:53:57
回答 1查看 3.8K关注 0票数 1

我正在使用Asp.net mvc 5和EF 6来制作一个web应用程序。我从Internet应用程序模板开始,并添加了以下类:

代码语言:javascript
复制
public class Article
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid ID { get; set; }
    public string Tags { get; set; } 
    public string Name { get; set; }
    public string Link { get; set; }
    public string HtmlContent { get; set; }
    [ForeignKey("ListaId")]
    public Lista Lista { get; set; }
    public Guid ListaId { get; set; }
}

public class List
{

    public string Name { get; set; }
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid ID { get; set; }
    public int Status { get; set; } 
    public virtual ApplicationUser User { get; set; }
    public string ApplicationUserId { get; set; }
    public string Tags { get; set; } 
}

但是,每当nuget包管理器更新db并运行Seed方法时,当试图在db中插入项目时,它就会中断。以下是configuration.cs中的种子方法

代码语言:javascript
复制
        context.Lists.AddOrUpdate(new Lista
        {
            Name = "Technology",
            ApplicationUserId = "f06b0d2e-2088-4cd7-8b1c-4fcad5619f3c",
            Status = 1,
            Tags = "Tech,News"
        });
        context.SaveChanges();

        Lista l1 = context.Lists.Where(x => x.Status == 1).First();

        context.Articles.AddOrUpdate(new Article
        {
            ListaId = l1.ID,
            Link = "www.abc.com",
            Name = "ABC",
            Tags = "c,test",
            HtmlContent = "Hello World"
        });
        context.SaveChanges(); //here it breaks

内部异常: System.Data.SqlClient.SqlException:无法将值NULL插入'ID‘、表’aspnet 20141022011020.dbo.articules‘;列不允许空。插入失败--如果我将键加表示法从DatabaseGenerated(DatabaseGeneratedOption.Identity)类中删除,则得到相同的错误: System.Data.SqlClient.SqlException:违反主键约束'PK_dbo.Articles‘。无法在对象'dbo.Articles‘中插入重复键。重复键值为(00000000-0000-0000-0000-000000000000)。

使用long/int代替Guid,我得到一个更新数据库错误,例如:unique标识符与bigint/int不兼容。

我能做什么?为什么不用guid生成一个正确的id呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-28 21:46:00

你必须告诉数据库你想要这样的行为。通常,EF6是足够聪明的,如果您使用代码优先的方法,它将能够生成正确的行为。

转到数据库,修改ID字段,并将其添加到默认值:newsequentialid()

如果您想自己创建Guid:

代码语言:javascript
复制
public class Article
{
    [Key]
    public Guid ID { get; set; }
    public string Tags { get; set; } 
    public string Name { get; set; }
    public string Link { get; set; }
    public string HtmlContent { get; set; }
    [ForeignKey("ListaId")]
    public Lista Lista { get; set; }
    public Guid ListaId { get; set; }

    public Article(){
       ID = Guid.NewGuid();
    }

}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27680502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档