2012-06-11 44 views
2

這是我的MVC模式:使用uniqueidentifier列類型和[DatabaseGenerated(DatabaseGeneratedOption.Identity)不EF代碼工作的首位

public class Link 
{ 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Guid ID { get; set; } 

    [DisplayName("Shorted URL")] 
    public string SURL { get; set; } 

    [DisplayName("General Link")] 
    public string OriginalURL { get; set; } 

    [DisplayName("Click Count")] 
    public int ClickCount { get; set; } 
} 

,這是LinkDBContext類:

public class LinkDBContext : DbContext 
{ 
    public DbSet<Link> Links { get; set; } 
} 

時,我想使用此代碼一些數據添加到數據庫:

private string GetNewID(string url, string id) 
    { 
     LinkDBContext Links = new LinkDBContext(); 
     //id = "http://" + id; 
     List<Link> link = Links.Links.Where(a => (a.OriginalURL == id && a.SURL == id)).ToList(); 
     if (link.Count == 0) 
     { 
      List<Link> LLinks = Links.Links.ToList<Link>(); 
      Link li = new Link(); 
      //li.ID = new Guid(); 
      li.ClickCount = 0; 
      li.SURL = id; 
      li.OriginalURL = url; 
      Links.Links.Add(li); 
      Links.SaveChanges(); 
      Links.Dispose(); 
      return id.ToString(); 
     } 

     return GetNewID(url); 
    } 

我只是得到一個例外是:Cannot insert the value NULL into column 'ID', table 'GhiasiDB.dbo.Links'; column does not allow nulls. INSERT fails.The statement has been terminated.

這是什麼問題,我該如何解決它?


更新

我改變的ID類型從Guidint,當我又試了一次,我得到這個例外,從List<Link> LLinks = Links.Links.ToList<Link>();GetNewID方法:The 'ID' property on 'Link' could not be set to a 'Guid' value. You must set this property to a non-null value of type 'Int32'. ,我不知道在哪裏做的來自。我將所有Guid es更改爲int

回答

2

如果你允許EF生成表格,將創建設置爲(newid())默認值的PK。如果您先設計數據庫,則可以手動設置它。

+0

ID列是uniqeidentifire,它的PK,但我仍然得到例外! –

+0

@ahmadalishafiee您是否已將表中'ID'列的'Default Value或Binding'屬性設置爲'(newid())'? – Eranga

+0

不,我沒有。但我已經做到了,它工作。謝謝。 –

0

我認爲這是因爲Guid身份不兼容。你認爲如何自動增加Guid?

也許改變Idint可以幫助你

+0

編輯問題。 –

0

的Guid是結構型即值類型。您不能將null分配給值類型。如果你想要比這種情況下,你可以使用「」後鍵入聲明。

public Guid? ID { get; set; } 

如果仍然沒有幫助,嘗試一個INT

2

如果表中添加[DatabaseGenerated(DatabaseGeneratedOption.Identity)]之前就已經存在了,然後取出DbSet,運行Update-Database,再添加DbSet,最後再跑Update-Database

至少這是爲我修復它。

+0

這正是問題所在!謝謝! –

相關問題