Search code examples
subsonicsubsonic3one-to-manysimplerepository

SubSonic Simple Repository One-To-Many


I made a class like:

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);
    }
}

And another like

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);
    }
}

I then have code like:

        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();

It doesn't save the VideoCategory into my database, so obviously i'm missing something. What else is needed to done to save a one-to-many relationship?


Solution

  • You could probably just do the following, you'll probably want to tidy it up but it will ensure your foreign key value gets populated:

    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);