2015-06-21 2 views
2

Имея этот класс, который представляет собой модельНевозможно бросить код первого

public class User : IHaveId 
{ 
    public User() 
    { 
     Operations = new Collection<Operation>(); 
    } 
    public int Id { get; set; } 
    public string UserName { get; set; } 
    public string CardNumber { get; set; } 
    public string Pin { get; set; } 
    public double Balance { get; set; } 
    public bool Blocked { get; set; } 
    public ICollection<Operation> Operations { get; set; } 


} 

и этот метод семян в моей Initializer:

protected override void Seed(BankContext context) 
    { 
     var users = MockData.GetUsers(); 
     foreach (var user in users) 
     { 
      user.Operations.Add(
        new Operation 
        { 
         OperationType = OperationType.Balance, 
         PerformTime = DateTime.Now.AddDays(-10) 
        } 
      ); 

      user.Operations.Add(
        new Operation 
        { 
         OperationType = OperationType.GetMoney, 
         PerformTime = DateTime.Now.AddDays(-5), 
         AdditionInformation = "800" 
        } 
      ); 

      context.Users.Add(user); 
     } 
     base.Seed(context); 
    } 

Имея исключение на Добавить стадии говоря: Невозможно бросание Collection<Operation> к операции. Может кто-нибудь объяснить, почему это происходит?

Нужно ли указывать что-нибудь особенное в onModelCreating для этого случая?

+0

Недействительный литой комплект к эксплуатации? кажется, что вы назначаете сбор операции для одиночной операции, что невозможно. –

+0

Да, вот почему я здесь –

+0

Код в вопросе кажется работает нормально. – Fabio

ответ

1

Поскольку User.Operations должен быть свойством коллекции (а не ссылочный собственность), вам нужно использовать HasMany:

modelBuilder.Entity<User>() 
    .HasMany(a => a.Operations) 
    .WithOptional() 
    .WillCascadeOnDelete(true); 

Первоначально, вы говорили EF, что User.Operations является ссылкой свойство, которое вызывает когда вы пытаетесь присвоить ему коллекцию.

0

Okey, я нашел вопрос, Как я думал, причина была за пределами опубликованного кода. В моем классе BankContext я есть

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 

     modelBuilder.Entity<User>() 
      .HasOptional(a => a.Operations) 
      .WithOptionalDependent() 
      .WillCascadeOnDelete(true); 
    } 

Вот некоторые, как втекающий по этому вопросу. Может ли кто-нибудь объяснить, как это повлияло?

+0

Если у вас есть новый вопрос, лучше открыть новый – Peter

+0

Чтобы избежать следующего вопроса, не забудьте отметить общедоступный ICollection Операции {get; задавать; } как виртуальный – bubi

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