2016-04-12 52 views
0

Veritabanımı doğru kaydetmek için en iyi çözüm nedir: Bu verileri sqlite veritabanına kaydetmek ve CSV'ye vermek istiyorum, küçük bir yöntem yaptım, ancak bu işlemle EmailEntity'de PhotoEnt'i alamıyorum.SQLite.net yabancı anahtar ile bir ekleme yapmak

PhotoEntity:

public class PhotoEntity : EntityBase 
{ 
    [PrimaryKey, AutoIncrement] 
    public override int Id { get; set; } 

    public string IdGuid { get; set; } 

    public string PhotoDate { get; set; } 

    public string Image { get; set; } 

    [OneToMany] 
    public List<EmailEntity> Emails { get; set; } 
} 

EmailEntity:

public class EmailEntity : EntityBase 
{ 
    [PrimaryKey, AutoIncrement] 
    public override int Id { get; set; } 

    [ForeignKey(typeof (PhotoEntity))] 
    public string IdGuid { get; set; } 

    public string Email { get; set; } 

    [ManyToOne] 
    public PhotoEntity PhotoEnt { get; set; } 
} 

Ve ben kaydedildiğinde, bunu yapmak:

private void DoInsertBddCommand() 
    { 
     var guidForId = Guid.NewGuid().ToString(); 
     var dateTime = DateTime.Now.ToString(); 

     var photoEntity = new PhotoEntity 
     { 
      IdGuid = guidForId, 
      Image = _imageName, 
      PhotoDate = dateTime 
     }; 
     new PhotoBusiness().Save(photoEntity); 

     foreach (var item in Emails) 
     { 
      var emailEntity = new EmailEntity 
      { 
       IdGuid = guidForId, 
       Email = item, 
       PhotoEnt = photoEntity 
      }; 

      new EmailBusiness().Save(emailEntity); 
     } 
    } 

O SQLite.net ile ilk defa, herhangi bir öneri ?

yani burada, sen

+0

Eğer Sqlite.Net-Uzantıları kullanıyorsunuz? – pnavk

+0

Evet! Benim nugget: http://i.imgur.com/ACgKVnH.png –

+0

Serin. Ayrıca neden iki Kimlik parametresi (IdGuid ve Id) kullanıyorsunuz? PhotoEntity'nin yabancı anahtarı, PhotoEntity nesnesindeki int id özelliğine işaret edemez mi? Sadece bir cevap yazmadan önce senaryonuzu anladığımdan emin olmak istiyorum. – pnavk

cevap

1

Tamam teşekkürler nasıl yardımcı modeller kurulum olur: Ben ilişki attribtues içinde kaskad işlemleri tanımlamak

public class PhotoEntity : EntityBase 
{ 
    [PrimaryKey, AutoIncrement] 
    public override int Id { get; set; } 

    public string PhotoDate { get; set; } 

    public string Image { get; set; } 

    [OneToMany(CascadeOperations = CascadeOperation.All)] 
    public List<EmailEntity> Emails { get; set; } 
} 

public class EmailEntity : EntityBase 
{ 
    [PrimaryKey, AutoIncrement] 
    public override int Id { get; set; } 

    [ForeignKey(typeof (PhotoEntity))] 
    public int PhotoEntityId { get; set; } 

    public string Email { get; set; } 

    [ManyToOne(CascadeOperations = CascadeOperation.All)] 
    public PhotoEntity PhotoEnt { get; set; } 
} 

dikkat edin. Bu SQLite-Uzantıları docs doğrudan geçerli: https://bitbucket.org/twincoders/sqlite-net-extensions#markdown-header-cascade-operations

kaydetmek Şimdi ne zaman/sen özyinelemeli yöntemleri kullanmak gerekir nesneleri almak:

GetWithChildren 
InsertWithChildren 

https://bitbucket.org/twincoders/sqlite-net-extensions#markdown-header-cascade-read