2014-10-07 3 views
0

У меня есть класс User:EF один-к-одному не работает

[Table("User")] 
public class User { 

    public User() { 
     BusinessNumber = new BusinessNumber(); 
    } 

    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int UserId { get; set; } 
    public string Username { get; set; } 

    [Required] 
    public virtual BusinessNumber BusinessNumber { get; set; } 

} 

И BusinessNumber:

public class BusinessNumber { 

    public BusinessNumber() { 
     Subscribers = new List<SubscriberNumber>(); 
    } 

    [Key, ForeignKey("User")] 
    public int UserId { get; set; } 
    public string Sid { get; set; } 
    public string PhoneNumber { get; set; } 
    public string VenueName { get; set; } 
    public virtual User User { get; set; } 
    public List<SubscriberNumber> Subscribers { get; set; } 

} 

public class SubscriberNumber { 

    public SubscriberNumber() {} 

    [Key] 
    public int SubscriberNumberId { get; set; } 
    public string PhoneNumber { get; set; } 

} 

С следующим отображением:

public class NumberConfiguration : EntityTypeConfiguration<BusinessNumber> { 
    public NumberConfiguration() { 
     HasKey(c => c.UserId); 
     Property(c => c.UserId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); 
     HasRequired(c => c.User).WithRequiredDependent(s => s.BusinessNumber); 
    } 
} 

следующие результаты кода в новом BusinessNumber без поставляемого идентификатора. Если я проверить базу данных, я вижу пользователя с Id 1 и BusinessNumber с Id 1, но user.BusinessNumber.Id является 0.

var user = db.Users.First(s => s.Username == username); 

Я попытался с помощью Include, но получаю ошибку кратности:

var user = db.Users.Include(s => s.BusinessNumber).First(s => s.Username == username); 

Что я делаю неправильно?

ответ

2

Вы уверены, что этот код является правильным:

public User() 
{ 
    BusinessNumber = new BusinessNumber(); 
} 

Потому что это создаст новый BusinessNumber с ID нуля; звучит как проблема, с которой вы сталкиваетесь. Я думаю, что единственные вам нужно оставить null изначально.

Смежные вопросы