插入具有实体框架的记录时出错

本文关键字:记录 出错 框架 实体 插入 | 更新日期: 2023-09-27 18:28:32

如果已经得到答复,我很抱歉,但我找不到任何解决方案。这是我的(小)问题。此外,如果我使用的术语是近似的,我也很抱歉,我远不是一个熟练的C#开发人员

注意,我认为我的问题类似于这一个实体框架验证错误,因为缺少字段,但它';It’s not missing?

我有一个表"Tweets",其中有一个tweet_id字段(bigint),它是我的主键。

我使用以下类来加载表:

class TwitterDbContext : DbContext
{
    public TwitterDbContext() : base("Twitter")
    {
    }
    public DbSet<Stream> Streams { get; set; }
    public DbSet<StreamParameter> StreamParameters { get; set; }
    public DbSet<Tweet> Tweets { get; set; }
}
public class Tweet
{
    public Tweet()
    {
    }
    [Key]
    public long tweet_id { get; set; }
    public string tweet { get; set; }
    public long creator { get; set; }
    public double latitude { get; set; }
    public double longitude { get; set; }
    public string language { get; set; }
    public DateTime created_at { get; set; }
    public DateTime registered_at { get; set; }
    public long? in_reply_to { get; set; }
    public bool retweeted { get; set; }
}

我有另一个类要在代码执行中存储Tweet表使用的所有字段。为了满足这里的需要,让我们想象一下我以这种方式手动创建

        private void Test_Button_Click(object sender, RoutedEventArgs e)
    {
        Twts twtReceived = new Twts();
        twtReceived.tweet_id = 1;
        twtReceived.tweet = "test";
        twtReceived.creator = 1;
        twtReceived.latitude = -1;
        twtReceived.longitude = -1;
        twtReceived.language = "a";
        twtReceived.created_at = DateTime.Now;
        twtReceived.registered_at = DateTime.Now;
        twtReceived.in_reply_to = 1;
        twtReceived.retweeted = true;
        AddTweet(twtReceived);

    }

现在这里是AddTweet方法

static public void AddTweet(Twts twtReceived)
    {
        try
        {
            // update the tweet data in the database
            using (var TwitterDb = new TwitterDbContext())
            {
                Tweet twt = new Tweet() 
                {
                    tweet_id = twtReceived.tweet_id,
                    tweet = twtReceived.tweet,
                    creator = twtReceived.creator,
                    longitude = twtReceived.longitude,
                    latitude = twtReceived.latitude,
                    language = twtReceived.language,
                    created_at = twtReceived.created_at,
                    registered_at = twtReceived.registered_at,
                    in_reply_to = twtReceived.in_reply_to,
                    retweeted = twtReceived.retweeted   
                };
                TwitterDb.Tweets.Add(twt);
                TwitterDb.SaveChanges();
            }
        }
        catch(Exception ex)
        {
            MessageBox.Show(ex.InnerException.ToString());
        }
    }

我经常收到同样的错误信息:

无法将值NULL插入表的"tweet_id"列'Twitter.dbo.Tweets';列不允许为null。INSERT失败。

问题是,当我在TwitterDb.Tweets.Add(twt)之后监视"TwitterDb.Tweets.Local"时;我正确地将tweet_id设置为1。

知道问题在哪里吗?

插入具有实体框架的记录时出错

如果这是您想要自己提供值的主键列,请尝试用以下内容标记您的tweet_id字段(而不仅仅是[Key])

[Required, Key, DatabaseGenerated(DatabaseGeneratedOption.None)]

如果是自动递增,则删除对此字段的显式赋值,并将其标记为"标识":

[Required, Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]