C#试图将项目添加到数据库中,收到错误

时间:2014-09-28 01:12:39

标签: c# sql entity-framework azure entity-framework-5

我正在尝试将此信息添加到我的数据库中。我的SQL Server将为表中的每一行生成Id。但是,出于某种原因,我的代码为Id添加了一个“0”,我无法弄清楚它来自何处或来源,我需要将其删除,以便数据库可以生成它。

这是我的代码:

 public class Contact
{
    public Contact()
    {

    }

    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int Id { get; set; }

    [Required]
    [StringLength(50)]
    public string Name { get; set; }

    [Required]
    [StringLength(50)]
    public string Email { get; set; }

    [Column(TypeName = "ntext")]
    [Required]
    public string Message { get; set; }

    [Column(TypeName = "date")]
    [Required]
    public DateTime Date { get; set; }

    [Column(TypeName = "time")]
    [Required]
    public TimeSpan Time { get; set; }
}


public class Context : DbContext
{
    public Context()
        : base("ContactConnectionString")
    {

    }
    public DbSet<Contact> ContactForm { get; set; }
}


public class ImportToDataBase
{


    public static void SubmitToDatabase(string theMessage, string fullName, string emailAddress)
    {




        using (var db = new Context())
        {
            var contact = new Contact()
            {
                Email = emailAddress,
                Message = theMessage,
                Name = fullName,
                Date = DateTime.Now.Date,
                Time = DateTime.Now.TimeOfDay,
                // ID is not set in here
            };
            db.ContactForm.Add(contact);
            db.SaveChanges();
        }


    }
}
}

2 个答案:

答案 0 :(得分:1)

尝试使用以下内容装饰您的Id媒体资源:

[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]

Key属性告诉Entity Framework Id属性是主键,不应包含在insert语句中。

答案 1 :(得分:0)

作为最佳做法,您需要使用密钥和身份选项标记您的ID。

[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }

对于流畅的API,您可以使用:

 HasKey(i => i.ID);
 Property(i => i.ID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);