2014-10-30 108 views
2

如果已經被回答,我很抱歉,但我找不到任何解決方案。這是我的(小)問題。另外我所有的道歉,如果我使用的術語是近似的,我遠遠不是一個熟練的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.

任何想法在哪裏是問題?

回答

0

嘗試用下面的(而不是僅僅[關鍵]),如果這就是你想要自己提供值

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

主鍵列。如果它是一個自動增加的,那麼弄髒tweet_id場刪除明確的分配此字段並將其標記爲'身份',而不是:

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

Maksim Satsikau,感謝您的答覆。不是自動增量。它實際上是「默認」bigint設置爲主鍵 – 2014-10-30 01:32:38

+0

,第一次出錯了 - DatabaseGenerated.Identity會將該字段標記爲自動增量。在你的情況下,DatabaseGeneratedOption.None正是你所需要的 - 更新了答案 – 2014-10-30 01:40:47

+0

謝謝,完美的工作 – 2014-10-31 01:48:11