2015-06-21 37 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; } 


} 

这个种子法在我自己的初始化函数:

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 Operations {get;组; }虚拟 – bubi