You can also use LINQ to Entity Code First Model, Visual Studio 2013 and U2 Toolkit for .NET v2.1.0.
For more information on U2 Toolkit for .NET v2.1.0, see below.
Create Single-Value Class
public class CUSTOMER
{
public int CUSTID { get; set; }
public string FNAME { get; set; }
public string LNAME { get; set; }
public virtual ICollection<CUSTOMER_ORDER> Orders { get; set; }
}
Create Multi-Value Class
public class CUSTOMER_ORDER //Syntax : FILENAME_ASSOCIATION OR FILENAME_MULTIVALUE
{
[Column (Order =0)]
public int CUSTID { get; set; }
[Column(Order = 1)]
public string PRODID { get; set; }
[Column(Order = 2)]
public string SER_NUM { get; set; }
[Column(Order = 3)]
public int Z_MV_KEY { get; set; }
[Column(Order = 4)]
//[ForeignKey("CUSTID")]
public virtual CUSTOMER Customer { get; set; }
}
Create Relation between Single-Value Class and Multi-Value Class
public virtual ICollection<CUSTOMER_ORDER> Orders { get; set; }
public virtual CUSTOMER Customer { get; set; }
Create Context Class
public class CustomerContext : DbContext
{
public CustomerContext()
{
}
public DbSet<CUSTOMER> Customers { get; set; }
public DbSet<CUSTOMER_ORDER> Orders { get; set; } //Syntax : FILENAME_ASSOCIATION OR FILENAME_MULTIVALUE
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Conventions.Remove<PluralizingEntitySetNameConvention>();
modelBuilder.Conventions.Remove<OneToOneConstraintIntroductionConvention>();
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
modelBuilder.Conventions.Remove<AssociationInverseDiscoveryConvention>();
modelBuilder.Conventions.Remove<DatabaseGeneratedAttributeConvention>();
modelBuilder.Conventions.Remove<DeclaredPropertyOrderingConvention>();
modelBuilder.Conventions.Remove<RequiredNavigationPropertyAttributeConvention>();
modelBuilder.Entity<CUSTOMER>().Property(t => t.CUSTID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
Database.SetInitializer<CustomerContext>(null);
modelBuilder.Entity<CUSTOMER>()
.HasKey(pk => new { pk.CUSTID })
.ToTable("CUSTOMER");
modelBuilder.Entity<CUSTOMER_ORDER>()
.HasKey(pk => new { pk.CUSTID, pk.Z_MV_KEY })
.ToTable("CUSTOMER_ORDER");//Syntax : FILENAME_ASSOCIATION OR FILENAME_MULTIVALUE
modelBuilder.Entity<CUSTOMER_ORDER>()
.HasRequired(c => c.Customer)
.WithMany(p => p.Orders)
.HasForeignKey(c => c.CUSTID)
.WillCascadeOnDelete(false);
}
}
Add an entry in App.Config File
<add name="CustomerContext" connectionString="Database=HS.SALES;User ID=user;Password=mypass;Server=myserver;Pooling=false;ServerType=universe;PersistSecurityInfo=true;AccessMode=Native;RpcServiceType=uvcs" providerName="U2.Data.Client"/>
Run the App
static void Main(string[] args)
{
try
{
Console.WriteLine("Start...");
Database.SetInitializer<CustomerContext>(null);
CustomerContext ctx = new CustomerContext();
var q = ctx.Customers.ToList();
foreach (var item in q)
{
string lCUSTID = Convert.ToString(item.CUSTID);
string lFNAME = Convert.ToString(item.FNAME); ;
string lLNAME = Convert.ToString(item.LNAME); ;
Console.Write("CUSTID:" + lCUSTID);
Console.Write(" FNAME:" + lFNAME);
Console.Write(" LNAME:" + lLNAME);
foreach (var item2 in item.Orders)
{
string lCUSTID2 = Convert.ToString(item2.CUSTID);
string lPRODID = Convert.ToString(item2.PRODID); ;
string lSER_NUM = Convert.ToString(item2.SER_NUM);
string lZ_MV_KEY = Convert.ToString(item2.Z_MV_KEY);
Console.Write("\t"+"CUSTID:" + lCUSTID2);
Console.Write("\t" + " PRODID:" + lPRODID);
Console.Write("\t" + " SER_NUM:" + lSER_NUM);
Console.Write("\t" + " Z_MV_KEY:" + lZ_MV_KEY);
}
Console.WriteLine();
}
Console.WriteLine("End...");
Console.Read();
}
catch (Exception e)
{
string lErr = e.Message;
if (e.InnerException != null)
{
lErr += e.InnerException.Message;
Console.WriteLine(lErr);
}
}
}
New Features in V2.1.0
- Complete ONE .NET Package
- Under one roof : SQL Access, Native Access and UniObjects API
(formerly known as UO.NET)
- Access NoSQL (multi-value data) with SQL Syntax
- Populate System Builder Account Files, Attributes and Subroutines
in Visual Studio Server Explorer.
- Multi-value ADO.NET Provider (Native Access with U2 Files,
Attributes, Subroutines)
- Multi-Value Add-ins (U2 Files, Attributes, Subroutines in Visual
Studio Server Explorer)
- Performance Tuning Parameters in connection string: “NativeFetch”
and “UseFastGetRecordID”
- Automatic Data Encryption (ADE) using U2Files and Subroutines
- SSL using U2Files and Subroutines
- Connection Pooling using U2Files and Subroutines
- Drag and Drop U2Files and Subroutines into DataSet Designer and
Entity Data Model Designer VS2010, VS2012 and VS2013 Support
- U2Files to JSON data ( to be used with JavaScript/HTML5, MVVM
pattern/Knockout.js)
- ASP.NET Web API and oData support using U2Files and Subroutines (
mobile devices, Tablet App, PhoneGap Mobile App, Xamarin Mobile
App, Windows Store)
- ASP.NET MVC4 Web Application and Classic ASP.NET Application using
U2Files and Subroutines
- WCF using U2Files and Subroutines
- WPF using U2Files and Subroutines
- SQL Server Integration Services (SSIS) using U2Files and
Subroutines
- SQL Server Reporting Services (SSRS) using U2Files and Subroutines
- SharePoint Designer and external data sources (U2 Files and
Subroutines)