gpt4 book ai didi

c# - 使用 Entity Framework 插入记录时出错

转载 作者:太空宇宙 更新时间:2023-11-03 15:49:07 27 4
gpt4 key购买 nike

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

请注意,我认为我的问题与这个类似Entity Framework validation error for missing field, but 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());
}
}

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

Cannot insert the value NULL into column 'tweet_id', table 'Twitter.dbo.Tweets'; column does not allow nulls. INSERT fails.

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

知道问题出在哪里吗?

最佳答案

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

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

如果是自增,则移除对该字段的显式赋值并将其标记为“Identity”:

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

关于c# - 使用 Entity Framework 插入记录时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26643324/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com