拥有代表模型的这个类
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);
}
在Add阶段有异常说:无法将Collection<Operation>
强制转换为Operation。
有人可以解释为什么会这样吗?
在这种情况下,我是否需要在onModelCreating中指定一些特殊内容?
答案 0 :(得分:1)
由于User.Operations
应该是集合属性(而不是引用属性),因此您需要使用HasMany
:
modelBuilder.Entity<User>()
.HasMany(a => a.Operations)
.WithOptional()
.WillCascadeOnDelete(true);
最初,您告诉EF User.Operations
是一个引用属性,当您尝试为其分配集合时会导致错误。
答案 1 :(得分:0)
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>()
.HasOptional(a => a.Operations)
.WithOptionalDependent()
.WillCascadeOnDelete(true);
}
有些人对此有何影响。任何人都可以解释这种影响吗?