2011-09-30 73 views
0

將項目/對象添加到列表/集合時出現問題。將項目添加到列表/集合(首先使用MVC EF 4.1代碼)

這是我到目前爲止已經完成了...

public abstract class Member 
{ 
    [DisplayName("ID")] 
    public string MemberId { get; set; } 

    [DisplayName("Date Applied")] 
    public System.DateTime? DateApplied { get; set; } 

    [DisplayName("Date Membered")] 
    public System.DateTime? DateMembered { get; set; } 

    [DisplayName("Member Type")] 
    public int MemberTypeFlag { get; set; } 

    private ICollection<Address> _Addresses; 
    public virtual ICollection<Address> Addresses 
    { 
     get { return _Addresses ?? (_Addresses = new HashSet<Address>()); } 
     set { _Addresses = value; } 
    } 
} 

public class Person : Member 
{ 
    [DisplayName("Last Name")] 
    public string LastName { get; set; } 

    [DisplayName("First Name")] 
    public string FirstName { get; set; } 

    [DisplayName("Date Of Birth")] 
    public System.DateTime DateOfBirth { get; set; } 
} 

而且我這是怎麼映射呢..

public class MapAddress : EntityTypeConfiguration<Address> 
{ 
    public MapAddress() 
     : base() 
    { 
     HasKey(a => a.MemberId).HasOptional(a => a.Member).WithMany(i => i.Addresses); 
     Property(p => p.Address1).HasColumnName("ADDRESS1"); 
     Property(p => p.Address2).HasColumnName("ADDRESS2"); 
     Property(p => p.City).HasColumnName("CITY"); 
     Property(p => p.ZipCode).HasColumnName("ZIPCODE"); 
     Property(p => p.AddressTypeFlag).HasColumnName("ADDRESS_TYPE_FFLG"); 
     ToTable("MBR_ADDRESS"); 
    } 
} 

而且在保存引發錯誤..

「一個或多個實體的驗證失敗。有關更多詳細信息,請參閱」EntityValidationErrors「屬性。」

我這是怎麼加入到集合..

public void Apply(PersonInformation member) 
    { 
     Person person = new Person(); 

     person = member.person; 
     person.MemberId = CustomID.GenerateID(); 
     person.MemberTypeFlag = (int)Enum.Parse(typeof(EnumMemberType), "Person"); 
     person.DateApplied = DateTime.Now; 

     Address baddress = new Address(); 
     baddress = member.billingAddress; 
     Address paddress = new Address(); 
     paddress = member.premiseAddress; 

     person.Addresses.Add(baddress); 
     person.Addresses.Add(paddress); 

     context.People.Add(person); 
     context.SaveChanges(); 
    } 

或者有其他優雅的方式,以節省許多地址的成員。

回答

0

爲什麼你要創建一個新的人和2個新地址,然後重新分配變量1行?在你的例子中有很多冗餘代碼。

您的代碼基本上可以歸結爲以下幾點:

public void Apply(PersonInformation member) 
{ 
    member.person.MemberId = CustomID.GenerateID(); 
    member.person.MemberTypeFlag = (int)Enum.Parse(typeof(EnumMemberType), "Person"); 
    member.person.DateApplied = DateTime.Now; 

    member.person.person.Addresses.Add(member.billingAddress); 
    person.Addresses.Add(member.premiseAddress); 

    context.People.Add(member.person); 
    context.SaveChanges(); 
}