2015-06-21 66 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