在添加一对多关系实体时,我收到了InvalidCaseException。它在Add not on the SaveChanges上失败。
无法投射类型的对象 输入'System.Collections.Generic.List`1 [UserAccount]' 'UserAccount'。
将X的集合添加到X
的一个实例中(家长或一个实体)
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false), Serializable()]
public class Merchant
{
/// <summary>
/// Standard ID
/// </summary>
[Key]
[DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
[DataType(DataType.Text), MaxLength(100)]
/// <summary>
/// UserFriendly Name
/// </summary>
public string MerchantName { get; set; }
/// Billing Information
/// </summary>
public virtual ICollection<BillingTransactions> BillingTransactions { get; set; }
/// <summary>
/// List of Accounts for this merchant (pulled from DBAccounts)
/// </summary>
public virtual ICollection<UserAccount> UserAccounts { get; set; }
}
(孩子或许多人)
public class UserAccount
{
private string loginID;
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
/// <summary>
/// Standard ID
/// </summary>
public int ID { get; set; }
public int MerchantId { get; set; }
[ForeignKey("ID")]
public Merchant Merchant { get; set; }
//Obviously there are more properties here....
}
我按如下方式创建新实体:
public void CreateNewMerchant(UserAccount useraccount)
{
Merchant merchant;
if (useraccount.Merchant == null) //New unknown merchant
{
merchant = new Model.Merchant.Merchant();
merchant.UserAccounts = new List<UserAccount>();
merchant.UserAccounts.Add(useraccount);
}
else
{
merchant = useraccount.Merchant;
}
ServiceBase<Merchant> sb = new Core.ServiceBase<Merchant>();
base.Add(merchant);
base.Save();
}
这是一个类似于表单界面的向导。第一步是创建一个useraccount。下一步是填写新的商家信息。向导步骤正在创建子对象useraccount和空父对象,然后在下一步中创建父对象。
我的代码正在创建一个空白/空父项,并将child / useraccount添加到空商家并添加到数据库中。
为什么我收到了无效的演员豁免?
答案 0 :(得分:1)
你需要......
[ForeignKey("MerchantId")]
public Merchant Merchant { get; set; }
...而不是[ForeignKey("ID")]
,它将使用主键作为外键,因此定义一对一而不是一对多的关系。