RelationType Enumeration

Determines the lookup type

Definition

Namespace: Firefly.Box
Assembly: Firefly.Box (in Firefly.Box.dll) Version: debug-master-v:33791
C#
public enum RelationType

Example

This example demonstrates the usage of RelationsTypes
This example is in the form of Unit Tests. It references the NUnit framework. This framework can be downloaded from www.NUnit.org. For more information about unit testing visit: www.NUnit.org.
This example is based on test data. The code for the entities included in this test data can be found in the documentation of Entity
C#
using System;
using System.Collections.Generic;
using System.Text;
using NUnit.Framework;
using Firefly.Box;
using Firefly.Box.Testing;

namespace TestFirefly.Box.Documentation
{
    [TestFixture]
    public class RelationTypes
    {
        [Test]
        public void Find()
        {
            var employees = new Pubs.Employees();
            var jobs = new Pubs.Jobs();
            employees.InitializeWithTestData();
            jobs.InitializeWithTestData();
            DeleteJobBusinessOperationsManager();

            var bp = new BusinessProcess
            {
                From = employees
            };
            bp.Relations.Add(jobs, RelationType.Find,//The default Relation Type
                jobs.Id.IsEqualTo(employees.JobId));
            string namesAndJobs = "";
            bp.ForEachRow(() =>
            {
                namesAndJobs += employees.LastName.Value.TrimEnd() + " - " +
                                jobs.Description.Value.TrimEnd() + "\n";
                if (bp.Counter == 5)
                    bp.Exit();
            });
            namesAndJobs.ShouldBe("Cruz - Productions Manager\n" +
                "Devon - \n" +//This row in the job entity was not found
                "Roulet - Managing Editor\n" +
                "Domingues - Public Relations Manager\n" +
                "Hernadez - Publisher\n");
        }
        [Test]
        public void Insert()
        {
            var jobs = new Pubs.Jobs();
            jobs.InitializeWithTestData();
            jobs.CountRows().ShouldBe(14);

            var bp = new BusinessProcess();
            bp.Relations.Add(jobs, RelationType.Insert);
            bp.ForFirstRow(() =>
                               {
                                   //Settings the value for the new relation
                                   jobs.Id.Value = 15;
                                   jobs.Description.Value = "Software Developer";
                               });
            jobs.CountRows().ShouldBe(15);//Now there are 15 jobs, as the 15th job was inserted
        }
        [Test]
        public void InsertIfNotFound()
        {
            var employees = new Pubs.Employees();
            var jobs = new Pubs.Jobs();
            employees.InitializeWithTestData();
            jobs.Truncate();//Truncating the jobs table, so it'll be 
            //recreated using InsertIfNotFound

            string employeeAndJobs = "";
            var bp = new BusinessProcess();
            bp.From = employees;
            var relationToJobs = bp.Relations.Add(jobs, RelationType.InsertIfNotFound,
                             jobs.Id.IsEqualTo(employees.JobId));

            bp.ForEachRow(() =>
                              {
                                  if (!relationToJobs.RowFound)
                                  {
                                      jobs.Id.Value = employees.JobId;
                                      jobs.Description.Value = "Job " + jobs.Id;
                                  }
                                  employeeAndJobs += employees.LastName.ToString().TrimEnd()
                                      + " job "
                                      + employees.JobId.ToString().Trim() + " " +
                                      (relationToJobs.RowFound ? "Exists" : "Doesn't Exist") + "\n";
                                  if (bp.Counter == 15)
                                      bp.Exit();
                              });
            employeeAndJobs.ShouldBe(
                "Cruz job 10 Doesn't Exist\n" + //At this time job 10 doesn't exist
                "Devon job 3 Doesn't Exist\n" +
                "Roulet job 6 Doesn't Exist\n" +
                "Domingues job 8 Doesn't Exist\n" +
                "Hernadez job 5 Doesn't Exist\n" +
                "Schmitt job 13 Doesn't Exist\n" +
                "Tonini job 11 Doesn't Exist\n" +
                "Roel job 6 Exists\n" +//Because job 6 was already inserted on row 3, it exists here
                "Lincoln job 14 Doesn't Exist\n" +
                "Chang job 4 Doesn't Exist\n" +
                "Thomas job 9 Doesn't Exist\n" +
                "Nagy job 7 Doesn't Exist\n" +
                "Snyder job 12 Doesn't Exist\n" +
                "Bennett job 12 Exists\n" +//Was added on the previous row
                "Labrune job 5 Exists\n"//was added on the 5th row
            );
        }
        [Test]
        public void Join()
        {
            var employees = new Pubs.Employees();
            var jobs = new Pubs.Jobs();
            employees.InitializeWithTestData();
            jobs.InitializeWithTestData();
            DeleteJobBusinessOperationsManager();

            var bp = new BusinessProcess
            {
                From = employees
            };
            bp.OrderBy.Segments.Add(employees.Id);
            bp.Relations.Add(jobs, RelationType.Join,
                jobs.Id.IsEqualTo(employees.JobId));
            string namesAndJobs = "";
            bp.ForEachRow(() =>
            {
                namesAndJobs += employees.LastName.Value.TrimEnd() + " - " +
                                jobs.Description.Value.TrimEnd() + "\n";
                if (bp.Counter == 5)
                    bp.Exit();
            });
            namesAndJobs.ShouldBe("Cruz - Productions Manager\n" +
                "Roulet - Managing Editor\n" +//Devon was not written as his job (5) was deleted
                "Domingues - Public Relations Manager\n" +
                "Hernadez - Publisher\n"+
                "Schmitt - Sales Representative\n");
        }
        [Test]
        public void OuterJoin()
        {
            var employees = new Pubs.Employees();
            var jobs = new Pubs.Jobs();
            employees.InitializeWithTestData();
            jobs.InitializeWithTestData();
            DeleteJobBusinessOperationsManager();

            var bp = new BusinessProcess
            {
                From = employees
            };
            bp.OrderBy.Segments.Add(employees.Id);
            bp.Relations.Add(jobs, RelationType.OuterJoin,
                jobs.Id.IsEqualTo(employees.JobId));
            string namesAndJobs = "";
            bp.ForEachRow(() =>
            {
                namesAndJobs += employees.LastName.Value.TrimEnd() + " - " +
                                jobs.Description.Value.TrimEnd() + "\n";
                if (bp.Counter == 5)
                    bp.Exit();
            });
            namesAndJobs.ShouldBe("Cruz - Productions Manager\n" +
                "Roulet - Managing Editor\n" +
                "Devon - \n" +
                "Domingues - Public Relations Manager\n" +
                "Hernadez - Publisher\n");
        }
        void DeleteJobBusinessOperationsManager()
        {
            var jobs = new Pubs.Jobs();
            var bp = new BusinessProcess()
                         {
                             From = jobs,
                             Activity = Activities.Delete
                         };
            bp.Where.Add(jobs.Id.IsEqualTo(3));
            bp.Run();
        }
    }
    }

Members

Find0 The row will be fetched from the database. If the row doesn't exist, the columns will display default values, but any change to those default values will not be saved to the database, because there is no row.
Insert1 A new row will be created. All the columns will display their default values
InsertIfNotFound2 The row will be fetched from the database. If the row doesn't exist, the columns will display default values and a new row will be created
Join3 The lookup will fetch rows using a database inner join to the Table of the task. The result affect is that the task rows will be filtered to show only rows for which a row exist in the looked up table.
OuterJoin4 The lookup will fetch rows using a database left outer join to the Table of the task. If a row wasn't found in the looked up table, the columns will display their default values.

See Also