-
Notifications
You must be signed in to change notification settings - Fork 0
Home
quick-gate edited this page May 22, 2019
·
5 revisions
Eaf is metadata framework for building persistent entity based systems like ERP, CRM, E-Commerce ....
- Create entities
public class Product
{
public int Id { get; set; }
public string Code { get; set; }
public string Barcode { get; set; }
public bool IsActive { get; set; }
public string SerialNumber { get; set; }
public IList<ProductTranslation> Translations { get; set; }
}
- Create multi-language metadata model
public class ProductDescriptor : EntityDescriptor<Product>
{
public AttributeMetadata Id { get; set; } = new AttributeMetadata
{
Name = nameof(Product.Id),
IsKey = true,
Type = new AttributeType
{
DataType = AttributeDataType.Integer
},
Translations = new List<AttributeMetadataTranslation>
{
new AttributeMetadataTranslation
{
Caption = "Id",
LanguageCode = LanguageCodes.en
},
new AttributeMetadataTranslation
{
Caption = "Id",
LanguageCode = LanguageCodes.cs
}
}
};
public AttributeMetadata Code { get; set; } = new AttributeMetadata
{
Name = nameof(Product.Code),
Type = new AttributeType
{
DataType = AttributeDataType.String,
Length = 150
},
Translations = new List<AttributeMetadataTranslation>
{
new AttributeMetadataTranslation
{
LanguageCode = LanguageCodes.en,
Caption = "Product Code"
},
new AttributeMetadataTranslation
{
LanguageCode = LanguageCodes.cs,
Caption = "Kód produktu"
}
}
};
- Create and Migrate Database structure
- Seed Data
- Create ORM mapping
_eafDataContext.Save(product);
_eafDataContext.Delete(product);
_eafDataContext.Products.FirstOrDefault(x=>x.Code == "12345" && x.IsActive);
- Create Data Management UI
- Create Simple Metadata Query Model
ProductMetadata.Instance
.Select(x.Id, x.Code, x.Translations.Name)
.Where(x.Code.Eq("Test")).And(x.MainCategory.Code.NotNullOrEmpty)
.OrderBy(x.MainCategory.Order);
//Linq Future (not implemented)
var products = new Query<Product>()
.Select(x=>x.Id, x.Code, x.Translations.Name)
.Where(x=>x.IsActive && x.Translations.Language == "en")
.OrderBy(x=>x.Name).ToList();
- Add reference to EAF Framework
- If you want use EF Core Migration install NuGet Microsoft.EntityFrameworkCore.Design
- Create your Domain and Descriptor Classes
- Configure EAF framework in ASP.NET Startup file
private const string CorsPolicyName = "AllowAllCorsPolicy";
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.AddNewtonsoftJson(x =>
{
//You can set as you need
x.SerializerSettings.ContractResolver = new DefaultContractResolver();
x.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
});
services
.AddEaf()
.AddMetadataAssemblies(typeof(Product).Assembly) //Add assembly which contains Eaf Descriptors
//Set your connection string
.AddDataContext<ErpDataContext>("Server=(local);Database=E-Commerce;Uid=sa;Pwd=******");
services.AddCors(options =>
{
options.AddPolicy(CorsPolicyName,
builder =>
{
// For production set right Origins
builder
.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod();
});
});
.....
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
//Add to documentation
app.UseCors(CorsPolicyName);
...