简体   繁体   中英

Entity Framework 6 Guid generated null?

I'm using Asp.net mvc 5 and EF 6 to make a web app. I started with the Internet app template and added those classes:

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

But every time the nuget package manager updates the db and runs the Seed method, it breaks when trying to insert an article in the db. here's the seed method in the configuration.cs

        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

The inner exception: System.Data.SqlClient.SqlException: Cannot insert the value NULL into column 'ID', table 'aspnet-Webapp-20141022011020.dbo.Articles'; column does not allow nulls. INSERT fails I get the same error if I take the [Key] adnotation out of the Article class and if I take the [DatabaseGenerated(DatabaseGeneratedOption.Identity)] adnotation I get the following error: System.Data.SqlClient.SqlException: Violation of PRIMARY KEY constraint 'PK_dbo.Articles'. Cannot insert duplicate key in object 'dbo.Articles'. The duplicate key value is (00000000-0000-0000-0000-000000000000).

With long/int in Guid's place I get an update-database error like: uniqueidentifier is incompatible with bigint/int.

What can I do? Why isn't it generating a proper id with guid?

You have to tell the database that you want such behavior. Usually the EF6 is smart enough if you use code-first approach, it'll be able to generate the correct behavior.

Go to the database, modify the ID field, and add this to default value: newsequentialid() .

If you want to create the Guid yourself:

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

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM