public static IEdmModel GetExplicitModel(string singletonName) { ODataModelBuilder builder = new ODataModelBuilder(); // Define EntityType of Partner var partner = builder.EntityType<Partner>(); partner.HasKey(p => p.ID); partner.Property(p => p.Name); var partnerCompany = partner.HasRequired(p => p.Company); // Define Enum Type var category = builder.EnumType<CompanyCategory>(); category.Member(CompanyCategory.IT); category.Member(CompanyCategory.Communication); category.Member(CompanyCategory.Electronics); category.Member(CompanyCategory.Others); // Define EntityType of Company var company = builder.EntityType<Company>(); company.HasKey(p => p.ID); company.Property(p => p.Name); company.Property(p => p.Revenue); company.EnumProperty(p => p.Category); var companyPartners = company.HasMany(p => p.Partners); companyPartners.IsNotCountable(); var companyBranches = company.CollectionProperty(p => p.Branches); // Define Complex Type: Office var office = builder.ComplexType<Office>(); office.Property(p => p.City); office.Property(p => p.Address); // Define Derived Type: SubCompany var subCompany = builder.EntityType<SubCompany>(); subCompany.DerivesFrom<Company>(); subCompany.Property(p => p.Location); subCompany.Property(p => p.Description); subCompany.ComplexProperty(p => p.Office); builder.Namespace = typeof(Partner).Namespace; // Define PartnerSet and Company(singleton) EntitySetConfiguration<Partner> partnersConfiguration = builder.EntitySet<Partner>("Partners"); partnersConfiguration.HasIdLink(c=>c.GenerateSelfLink(false), true); partnersConfiguration.HasSingletonBinding(c => c.Company, singletonName); Func<EntityInstanceContext<Partner>, IEdmNavigationProperty, Uri> link = (eic, np) => eic.GenerateNavigationPropertyLink(np, false); partnersConfiguration.HasNavigationPropertyLink(partnerCompany, link, true); partnersConfiguration.EntityType.Collection.Action("ResetDataSource"); SingletonConfiguration<Company> companyConfiguration = builder.Singleton<Company>(singletonName); companyConfiguration.HasIdLink(c => c.GenerateSelfLink(false), true); companyConfiguration.HasManyBinding(c => c.Partners, "Partners"); Func<EntityInstanceContext<Company>, IEdmNavigationProperty, Uri> linkFactory = (eic, np) => eic.GenerateNavigationPropertyLink(np, false); companyConfiguration.HasNavigationPropertyLink(companyPartners, linkFactory, true); companyConfiguration.EntityType.Action("ResetDataSource"); companyConfiguration.EntityType.Function("GetPartnersCount").Returns<int>(); return builder.GetEdmModel(); }
public static IEdmModel GetExplicitModel() { ODataModelBuilder builder = new ODataModelBuilder(); var accountType = builder.EntityType<Account>(); accountType.HasKey(a => a.AccountID); accountType.Property(a => a.Name); var payoutPI = accountType.ContainsOptional(a => a.PayoutPI); var payinPIs = accountType.HasMany(a => a.PayinPIs) .Contained(); var premiumAccountType = builder.EntityType<PremiumAccount>() .DerivesFrom<Account>(); var giftCard = premiumAccountType.ContainsRequired(pa => pa.GiftCard); var giftCardType = builder.EntityType<GiftCard>(); giftCardType.HasKey(g => g.GiftCardID); giftCardType.Property(g => g.GiftCardNO); giftCardType.Property(g => g.Amount); var paymentInstrumentType = builder.EntityType<PaymentInstrument>(); paymentInstrumentType.HasKey(pi => pi.PaymentInstrumentID); paymentInstrumentType.Property(pi => pi.FriendlyName); var statement = paymentInstrumentType.ContainsOptional(pi => pi.Statement); var statementType = builder.EntityType<Statement>(); statementType.HasKey(s => s.StatementID); statementType.Property(s => s.TransactionDescription); statementType.Property(s => s.Amount); var accounts = builder.EntitySet<Account>("Accounts"); accounts.HasIdLink(c => c.GenerateSelfLink(false), true); accounts.HasEditLink(c => c.GenerateSelfLink(true), true); builder.Singleton<Account>("AnonymousAccount"); AddBoundActionsAndFunctions(builder); builder.Namespace = typeof(Account).Namespace; return builder.GetEdmModel(); }
public static IEdmModel GetEdmModel() { if (_model == null) { ODataModelBuilder model = new ODataModelBuilder(); var color = model.EnumType<Color>(); color.Member(Color.Red); color.Member(Color.Green); color.Member(Color.Blue); var people = model.EntitySet<FormatterPerson>("People"); people.HasFeedSelfLink(context => new Uri(context.Url.CreateODataLink(new EntitySetPathSegment( context.EntitySetBase)))); people.HasIdLink(context => { return new Uri(context.Url.CreateODataLink( new EntitySetPathSegment(context.NavigationSource as IEdmEntitySet), new KeyValuePathSegment(context.GetPropertyValue("PerId").ToString()))); }, followsConventions: false); var person = people.EntityType; person.HasKey(p => p.PerId); person.Property(p => p.Age); person.Property(p => p.MyGuid); person.Property(p => p.Name); person.EnumProperty(p => p.FavoriteColor); person.ComplexProperty<FormatterOrder>(p => p.Order); var order = model.ComplexType<FormatterOrder>(); order.Property(o => o.OrderAmount); order.Property(o => o.OrderName); // Add a top level function without parameter and the "IncludeInServiceDocument = true" var getPerson = model.Function("GetPerson"); getPerson.ReturnsFromEntitySet<FormatterPerson>("People"); getPerson.IncludeInServiceDocument = true; // Add a top level function without parameter and the "IncludeInServiceDocument = false" var getAddress = model.Function("GetAddress"); getAddress.Returns<string>(); getAddress.IncludeInServiceDocument = false; // Add an overload top level function with parameters and the "IncludeInServiceDocument = true" getPerson = model.Function("GetPerson"); getPerson.Parameter<int>("PerId"); getPerson.ReturnsFromEntitySet<FormatterPerson>("People"); getPerson.IncludeInServiceDocument = true; // Add an overload top level function with parameters and the "IncludeInServiceDocument = false" getAddress = model.Function("GetAddress"); getAddress.Parameter<int>("AddressId"); getAddress.Returns<string>(); getAddress.IncludeInServiceDocument = false; // Add an overload top level function var getVipPerson = model.Function("GetVipPerson"); getVipPerson.Parameter<string>("name"); getVipPerson.ReturnsFromEntitySet<FormatterPerson>("People"); getVipPerson.IncludeInServiceDocument = true; // Add a top level function which is included in service document getVipPerson = model.Function("GetVipPerson"); getVipPerson.ReturnsFromEntitySet<FormatterPerson>("People"); getVipPerson.IncludeInServiceDocument = true; // Add an overload top level function getVipPerson = model.Function("GetVipPerson"); getVipPerson.Parameter<int>("PerId"); getVipPerson.Parameter<string>("name"); getVipPerson.ReturnsFromEntitySet<FormatterPerson>("People"); getVipPerson.IncludeInServiceDocument = true; // Add a top level function with parameters and without any overload var getSalary = model.Function("GetSalary"); getSalary.Parameter<int>("PerId"); getSalary.Parameter<string>("month"); getSalary.Returns<int>(); getSalary.IncludeInServiceDocument = true; // Add Singleton var president = model.Singleton<FormatterPerson>("President"); president.HasIdLink(context => { return new Uri(context.Url.CreateODataLink(new SingletonPathSegment((IEdmSingleton)context.NavigationSource))); }, followsConventions: false); _model = model.GetEdmModel(); } return _model; }
public void RemoveSingleton_ByName() { // Arrange ODataModelBuilder builder = new ODataModelBuilder(); builder.Singleton<Car>("Contoso"); // Act bool removed = builder.RemoveSingleton("Contoso"); // Assert Assert.True(removed); Assert.Empty(builder.Singletons); }
public void AddSingleton_ByName() { // Arrange ODataModelBuilder builder = new ODataModelBuilder(); // Act var singletonType = builder.Singleton<Company>("OsCorp"); // Assert Assert.IsType(typeof(SingletonConfiguration<Company>), singletonType); var singleton = Assert.Single(builder.Singletons); Assert.Equal("OsCorp", singleton.Name); Assert.Equal(typeof(Company), singleton.ClrType); }
public void CreateEdmModel_WithSingletons_AndSingletonBindingToSingleton() { // Arrange var builder = new ODataModelBuilder() .Add_Company_EntityType() .Add_Employee_EntityType() .Add_CompanyEmployees_Relationship(); // Singleton -> Singleton builder.Singleton<Company>("OsCorp").HasSingletonBinding(c => c.CEO, "Boss"); // Act & Assert var model = builder.GetEdmModel(); Assert.NotNull(model); var container = model.SchemaElements.OfType<IEdmEntityContainer>().SingleOrDefault(); Assert.NotNull(container); var osCorp = container.FindSingleton("OsCorp"); Assert.NotNull(osCorp); var gates = container.FindSingleton("Boss"); Assert.NotNull(gates); var vipCompanyVipEmployee = osCorp.NavigationPropertyBindings.FirstOrDefault(nt => nt.NavigationProperty.Name == "CEO"); Assert.NotNull(vipCompanyVipEmployee); Assert.Same(gates, vipCompanyVipEmployee.Target); Assert.Equal("Boss", vipCompanyVipEmployee.Target.Name); }
public void CreateEdmModel_WithSingletonAndEntitySet_AndSingletonBindingToEntitySet() { // Arrange var builder = new ODataModelBuilder() .Add_Company_EntityType() .Add_Employee_EntityType() .Add_CompanyEmployees_Relationship(); // Singleton -> EntitySet builder.Singleton<Company>("OsCorp").HasManyBinding(c => c.ComplanyEmployees, "Employees"); // Act & Assert var model = builder.GetEdmModel(); Assert.NotNull(model); var container = model.SchemaElements.OfType<IEdmEntityContainer>().SingleOrDefault(); Assert.NotNull(container); var osCorp = container.FindSingleton("OsCorp"); Assert.NotNull(osCorp); var employees = container.FindEntitySet("Employees"); Assert.NotNull(employees); var companyEmployees = osCorp.NavigationPropertyBindings.FirstOrDefault(nt => nt.NavigationProperty.Name == "ComplanyEmployees"); Assert.NotNull(companyEmployees); Assert.Equal("Employees", companyEmployees.Target.Name); }
private ODataModelBuilder GetSingletonModel() { ODataModelBuilder builder = new ODataModelBuilder(); var product = builder.Singleton<SingletonProduct>("Exchange"); var productType = product.EntityType; productType.HasKey(p => p.ID); productType.Property(p => p.Name); productType.Property(p => p.Price); productType.Property(p => p.Cost); return builder; }
// Singleton -> EntitySet public static ODataModelBuilder Add_MicrosoftEmployees_Binding(this ODataModelBuilder builder) { builder.Singleton <Company>("OsCorp").HasManyBinding(c => c.ComplanyEmployees, "Employees"); return(builder); }
// Singleton -> Singleton public static ODataModelBuilder Add_MicrosoftCEO_Binding(this ODataModelBuilder builder) { builder.Singleton <Company>("OsCorp").HasSingletonBinding(c => c.CEO, "CEO"); return(builder); }
public static IEdmModel GetEdmModel() { if (_model == null) { ODataModelBuilder model = new ODataModelBuilder(); var color = model.EnumType <Color>(); color.Member(Color.Red); color.Member(Color.Green); color.Member(Color.Blue); var people = model.EntitySet <FormatterPerson>("People"); people.HasFeedSelfLink(context => new Uri(context.Url.CreateODataLink(new EntitySetPathSegment( context.EntitySetBase)))); people.HasIdLink(context => { return(new Uri(context.Url.CreateODataLink( new EntitySetPathSegment(context.NavigationSource as IEdmEntitySet), new KeyValuePathSegment(context.GetPropertyValue("PerId").ToString())))); }, followsConventions: false); var person = people.EntityType; person.HasKey(p => p.PerId); person.Property(p => p.Age); person.Property(p => p.MyGuid); person.Property(p => p.Name); person.EnumProperty(p => p.FavoriteColor); person.ComplexProperty <FormatterOrder>(p => p.Order); var order = model.ComplexType <FormatterOrder>(); order.Property(o => o.OrderAmount); order.Property(o => o.OrderName); // Add a top level function without parameter and the "IncludeInServiceDocument = true" var getPerson = model.Function("GetPerson"); getPerson.ReturnsFromEntitySet <FormatterPerson>("People"); getPerson.IncludeInServiceDocument = true; // Add a top level function without parameter and the "IncludeInServiceDocument = false" var getAddress = model.Function("GetAddress"); getAddress.Returns <string>(); getAddress.IncludeInServiceDocument = false; // Add an overload top level function with parameters and the "IncludeInServiceDocument = true" getPerson = model.Function("GetPerson"); getPerson.Parameter <int>("PerId"); getPerson.ReturnsFromEntitySet <FormatterPerson>("People"); getPerson.IncludeInServiceDocument = true; // Add an overload top level function with parameters and the "IncludeInServiceDocument = false" getAddress = model.Function("GetAddress"); getAddress.Parameter <int>("AddressId"); getAddress.Returns <string>(); getAddress.IncludeInServiceDocument = false; // Add an overload top level function var getVipPerson = model.Function("GetVipPerson"); getVipPerson.Parameter <string>("name"); getVipPerson.ReturnsFromEntitySet <FormatterPerson>("People"); getVipPerson.IncludeInServiceDocument = true; // Add a top level function which is included in service document getVipPerson = model.Function("GetVipPerson"); getVipPerson.ReturnsFromEntitySet <FormatterPerson>("People"); getVipPerson.IncludeInServiceDocument = true; // Add an overload top level function getVipPerson = model.Function("GetVipPerson"); getVipPerson.Parameter <int>("PerId"); getVipPerson.Parameter <string>("name"); getVipPerson.ReturnsFromEntitySet <FormatterPerson>("People"); getVipPerson.IncludeInServiceDocument = true; // Add a top level function with parameters and without any overload var getSalary = model.Function("GetSalary"); getSalary.Parameter <int>("PerId"); getSalary.Parameter <string>("month"); getSalary.Returns <int>(); getSalary.IncludeInServiceDocument = true; // Add Singleton var president = model.Singleton <FormatterPerson>("President"); president.HasIdLink(context => { return(new Uri(context.Url.CreateODataLink(new SingletonPathSegment((IEdmSingleton)context.NavigationSource)))); }, followsConventions: false); _model = model.GetEdmModel(); } return(_model); }