2009-12-19 23 views
1

J'ai fait une classe comme:SubSonic Repository Simple One-To-Many

public class Video 
{ 
    public Guid VideoID { get; set; } 
    public VideoCategory VideoCategory { get; set; } 
    public int SortIndex { get; set; } 
    public string Title { get; set; } 
    public string Body { get; set; } 
    public string Author { get; set; } 
    public string Filename { get; set; } 

    public new void Add() 
    { 
     this.VideoID = Guid.NewGuid(); 
     DB.Repository.Add(this); 
    } 
} 

Et un autre comme

public class VideoCategory 
{ 
    public Guid VideoCategoryID { get; set; } 
    public string Title { get; set; } 

    public new void Add() 
    { 
     this.VideoCategoryID = Guid.NewGuid(); 
     DB.Repository.Add(this); 
    } 
} 

Je puis le code comme:

 VideoCategory VideoCategory = new VideoCategory(); 
     VideoCategory.Title = "TestTitle"; 
     VideoCategory.Add(); 

     Video Video = new Video(); 
     Video.VideoCategory = VideoCategory; 
     Video.SortIndex = 1; 
     Video.Title = "TestTitle"; 
     Video.Body = "TestBody"; 
     Video.Author = "TestAuthor"; 
     Video.Filename = "TestFile.flv"; 
     Video.Add(); 

Il n » t enregistrer la VideoCategory dans ma base de données, donc évidemment, il me manque quelque chose. Que faut-il faire d'autre pour sauver une relation un-à-plusieurs?

Répondre

0

Vous pourriez probablement faire exactement ce qui suit, vous aurez probablement envie de ranger vers le haut, mais il vous assurerez votre valeur de clé étrangère se remplie:

public class Video 
{ 
    protected VideoCategory videoCategory; 
    public Guid ID { get; set; } 
    public VideoCategory VideoCategory 
    { 
     get { return videoCategory; } 
     set 
     { 
      videoCategory = value; 
      VideoCategoryId = value.ID; 
     } 
    } 
    public Guid VideoCategoryId { get; set; } 
    public int SortIndex { get; set; } 
    public string Title { get; set; } 
    public string Body { get; set; } 
    public string Author { get; set; } 
    public string Filename { get; set; } 
} 

public class VideoCategory 
{ 
    public Guid ID { get; set; } 
    public string Title { get; set; } 
} 

SimpleRepository repo = new SimpleRepository(SimpleRepositoryOptions.RunMigrations); 

VideoCategory videoCategory = new VideoCategory(); 
videoCategory.ID = Guid.NewGuid(); 
videoCategory.Title = "TestTitle"; 
repo.Add<VideoCategory>(videoCategory); 

Video video = new Video(); 
video.ID = Guid.NewGuid(); 
video.VideoCategory = videoCategory; 
video.SortIndex = 1; 
video.Title = "TestTitle"; 
video.Body = "TestBody"; 
video.Author = "TestAuthor"; 
video.Filename = "TestFile.flv"; 
repo.Add<Video>(video); 
0

Vous ne manquez rien. Simplerepository ne supporte pas un à plusieurs hors de la boîte.

+0

Toutes les idées de bonnes pratiques sur la façon de mettre en œuvre moi-même? - Je devine changer l'ajout/mise à jour pour placer l'identification avant l'enregistrement? – Cederstrom

+0

Cela est vrai, mais il y a plusieurs «réponses» très trompeuses sur SO qui impliquent le contraire. Voir ma question http://stackoverflow.com/questions/1610362/subsonic-can-anyone-provide-an-example-of-using-subsonic-simplerepository-to-pe pour un échantillon de ce mauvais conseil. J'ai eu un certain succès avec Fluent NHibernate, en utilisant Automapping. –

+0

Tom: J'adore le subsonic et sa facilité d'utilisation, et je mourais d'envie d'utiliser le dépôt simplifié sur un nouveau projet; J'ai malheureusement rencontré cette question qui a fait de ce que je brise. J'ai hâte de voir les schémas relationnels se déduire de mon code! – Pierreten

0

Heres un lien utile qui montre comment Mangage clés étrangères vous-même dans SimpleRepository -

subsonic-3-simplerepository

N'a pas essayé moi-même, mais il semble que ce serait effectivement travailler.

Fluent Nhibernate fera automatiquement cette gestion des clés pour vous, mais c'est beaucoup plus complexe.

PS Si cela vous a été utile, merci de voter vers le haut.