2014-04-15 59 views
0

如何使用EF在外鍵上允許空值?如何在使用EF的外鍵上允許空值?

public class User 
{ 
    public User() 
    { 
    } 

    public int idUser; { get; set; } 
    [Required] 
    public string UserName { get; set; } 
    public virtual Computer Computer{ get; set; } 
} 

public class Computer 
{ 
    public Computer() 
    { 
    } 
    [Key, ForeignKey("User")] 
    public int idUser{ get; set; } 
    public string ComputerName {get;set;} 
    public virtual User User { get; set; } 
} 

運行此我外鍵讓not null

+0

使用'?'關鍵字。像:'公共虛擬計算機?計算機{get;設置;}' – Max

回答

-2

如何允許使用EF外鍵空值?

你的數據庫表應該允許空值,以及如果你正計劃採取以下辦法:

變化

public int idUser; { get; set; } 
[Required] 
public string UserName { get; set; } 
public virtual Computer Computer { get; set; } 

public int idUser; { get; set; } 
[Required] 
public string UserName { get; set; } 
public virtual Computer Computer{ get; set; } 

,並更改

[Key, ForeignKey("User")] 
public int idUser { get; set; } 
public string ComputerName { get; set; } 
public virtual User User { get; set; } 

[Key, ForeignKey("User")] 
public int? idUser { get; set; } 
public string ComputerName { get; set; } 
public virtual User User { get; set; } 

?的性格,使得現場nullable。確保它在數據庫中也是空的。

+0

字符串數據類型呢? –

+0

@Luciekulza默認情況下,一個字符串是一個引用類型,並且是「可空」的。 – Max

+0

需要我同時在'User?'和'int?'上寫'?'字符嗎? –

1

您可以使用?關鍵字。它使您的類型爲Nullable類型。

例如int不允許空值正常。

但在將?附加到int之後,您可以爲其分配null。

int? iCanHaveNull = null; 
2

我假設您先使用代碼。如果是這樣的話,那麼你在上下文類中重寫OnModelCreating並添加以下行

modelBuilder.Entity<Computer>().HasOptional(c => c.User); 

================ 好吧,你後,我改變了你的帖子張貼我的答案。

您可以使用

int? id用戶

爲您的用戶ID,這會讓EF知道您允許可以爲空的關係。