插入具有实体框架的记录时出错
本文关键字:记录 出错 框架 实体 插入 | 更新日期: 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)]