如果已經被回答,我很抱歉,但我找不到任何解決方案。這是我的(小)問題。另外我所有的道歉,如果我使用的術語是近似的,我遠遠不是一個熟練的C#開發用實體框架插入記錄時出錯
注意,我想我的問題是,類似這樣的一個Entity Framework validation error for missing field, but it's not missing?
我有一個表「推文」用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; }
}
我有一個其它類的代碼執行由鳴叫表使用的所有字段內存儲。對於這裏的需要,假設我手動創建這種方式
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';列不允許有空值。 INSERT失敗。
事情是,當我在TwitterDb.Tweets.Add(twt)之後監視「TwitterDb.Tweets.Local」時;我正確地將tweet_id設置爲1.
任何想法在哪裏是問題?
Maksim Satsikau,感謝您的答覆。不是自動增量。它實際上是「默認」bigint設置爲主鍵 – 2014-10-30 01:32:38
,第一次出錯了 - DatabaseGenerated.Identity會將該字段標記爲自動增量。在你的情況下,DatabaseGeneratedOption.None正是你所需要的 - 更新了答案 – 2014-10-30 01:40:47
謝謝,完美的工作 – 2014-10-31 01:48:11