2013-09-01 3 views
0

Я получаю исключение InvalidCaseException при добавлении одного объекта отношения к одному. Он не срабатывает при добавлении не в SaveChanges.EF InvalidCastException С отношением один ко многим

Невозможно привести объект типа 'System.Collections.Generic.List`1 [учетная_запись_пользователя] ввести ' 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 к пустому купе и добавляет в базу данных.

Почему я получаю исключение исключения?

ответ

1

Вам нужно ...

[ForeignKey("MerchantId")] 
public Merchant Merchant { get; set; } 

... вместо [ForeignKey("ID")] который будет использовать первичный ключ в качестве внешнего ключа и, следовательно, определить один-к-одному, а не отношения один-ко-многим ,

+0

Спасибо, что сработал. Я могу попытаться собрать свои собственные подсказки и подсказки для этого материала. Стандартные учебники очень смущали имена иностранных ключей и правильные методы для этого. – DanScan

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