با سلام
با تشکر از مقاله شما
در قسمت مشاهده گزارشات که دادهها را میخواهیم به صورت گرید kendo نمایش دهیم باید به چه صورت عمل کرد؟
Unrecognised method call: System.String:Boolean StartsWith(System.String)
Unrecognised method call: System.String:Boolean Contains(System.String)
using NHibernate.Validator.Constraints;
namespace NH3Test.MappingDefinitions.Domain
{
public class Account
{
public virtual int Id { get; set; }
[NotNullNotEmpty]
[Length(Min = 3, Max = 120, Message = "طول نام باید بین 3 و 120 کاراکتر باشد")]
public virtual string Name { get; set; }
[NotNull]
public virtual int Balance { set; get; }
}
}
var list = new[] { 12,10};
var resultList = session.QueryOver<Account>()
.WhereRestrictionOn(p => p.Balance)
.IsIn(list)
.List();
SELECT
this_.AccountId as AccountId0_0_,
this_.Name as Name0_0_,
this_.Balance as Balance0_0_
FROM
Accounts this_
WHERE
this_.Balance in (
@p0 /* = 10 */, @p1 /* = 12 */
)
var accountsContianX = session.QueryOver<Account>()
.WhereRestrictionOn(x => x.Name)
.IsLike("X", NHibernate.Criterion.MatchMode.Anywhere)
.List();
SELECT
this_.AccountId as AccountId0_0_,
this_.Name as Name0_0_,
this_.Balance as Balance0_0_
FROM
Accounts this_
WHERE
this_.Name like @p0 /* = %X% */
using NHibernate.Criterion;
...
var accountsContianX = session.QueryOver<Account>()
.Where(x => x.Name.IsLike("%X%"))
.List();
using System;
using System.Linq.Expressions;
using NHibernate;
using NHibernate.Criterion;
using NHibernate.Impl;
namespace NH3Test.ConsoleApplication
{
public static class MyQueryOverExts
{
public static bool YearIs(this DateTime projection, int year)
{
throw new Exception("Not to be used directly - use inside QueryOver expression");
}
public static ICriterion ProcessAnsiYear(MethodCallExpression methodCallExpression)
{
string property = ExpressionProcessor.FindMemberExpression(methodCallExpression.Arguments[0]);
object value = ExpressionProcessor.FindValue(methodCallExpression.Arguments[1]);
return Restrictions.Eq(
Projections.SqlFunction("year", NHibernateUtil.DateTime, Projections.Property(property)),
value);
}
}
public class QueryOverExtsRegistry
{
public static void RegistrMyQueryOverExts()
{
ExpressionProcessor.RegisterCustomMethodCall(
() => MyQueryOverExts.YearIs(DateTime.Now, 0),
MyQueryOverExts.ProcessAnsiYear);
}
}
}
QueryOverExtsRegistry.RegistrMyQueryOverExts(); //یکبار در ابتدای اجرای برنامه باید ثبت شود
...
var data = session.QueryOver<Account>()
.Where(x => x.AddDate.YearIs(2010))
.List();
SELECT
this_.AccountId as AccountId0_0_,
this_.Name as Name0_0_,
this_.Balance as Balance0_0_,
this_.AddDate as AddDate0_0_
FROM
Accounts this_
WHERE
strftime("%Y", this_.AddDate) = @p0 /* =2010 */
int i =5;
i += 15; // i = i + 15;
DECLARE @x1 int = 27;
SET @x1 += 2 ;
SELECT @x1 AS Added_2;
+= (Add EQUALS) (Transact-SQL)
-= (Subtract EQUALS) (Transact-SQL)
*= (Multiply EQUALS) (Transact-SQL)
/= (Divide EQUALS) (Transact-SQL)
%= (Modulo EQUALS) (Transact-SQL)
&= (Bitwise AND EQUALS) (Transact-SQL)
^= (Bitwise Exclusive OR EQUALS) (Transact-SQL)
|= (Bitwise OR EQUALS) (Transact-SQL)
public class ProductService { public IEnumerable<Product> GetOrderedProducts() { using (var ctx = new Entites()) { return ctx.Products.OrderBy(x => x.Name).ToList(); } } }
public interface IUnitOfWork { IDbSet<TEntity> Set<TEntity>() where TEntity : class; int SaveAllChanges(); } public class Entites : DbContext, IUnitOfWork { public virtual DbSet<Product> Products { get; set; } // This is virtual because Moq needs to override the behaviour public new virtual IDbSet<TEntity> Set<TEntity>() where TEntity : class // This is virtual because Moq needs to override the behaviour { return base.Set<TEntity>(); } public int SaveAllChanges() { return base.SaveChanges(); } }
public class ProductService { private readonly IDbSet<Product> _products; private readonly IUnitOfWork _uow; public ProductService(IUnitOfWork uow) { _uow = uow; _products = _uow.Set<Product>(); } public IEnumerable<Product> GetOrderedProducts() { return _products.OrderBy(x => x.Name).ToList(); } }
[TestFixture] public class ProductServiceTest { private readonly ProductService _productService; public ProductServiceTest() { IQueryable<Product> data = GetRoadNetworks().AsQueryable(); var mockSet = new Mock<DbSet<Product>>(); mockSet.As<IQueryable<Product>>().Setup(m => m.Provider).Returns(data.Provider); mockSet.As<IQueryable<Product>>().Setup(m => m.Expression).Returns(data.Expression); mockSet.As<IQueryable<Product>>().Setup(m => m.ElementType).Returns(data.ElementType); mockSet.As<IQueryable<Product>>().Setup(m => m.GetEnumerator()).Returns(data.GetEnumerator()); var context = new Mock<Entites>(); context.Setup(c => c.Products).Returns(mockSet.Object); context.Setup(m => m.Set<Product>()).Returns(mockSet.Object); _productService = new ProductService(context.Object); } private IEnumerable<Product> GetRoadNetworks() { return new List<Product> { new Product { Id = 1, Name = "A" }, new Product { Id = 2, Name = "B" }, new Product { Id = 3, Name = "C" } }; } [Test] public void GetOrderedProductTest() { IEnumerable<Product> products = _productService.GetOrderedProducts(); List<string> names = products.Select(x => x.Name).ToList(); var expected = new List<string> {"A", "B", "C"}; CollectionAssert.AreEqual(names, expected); } }
Install-Package Stimulsoft.Reports.Blazor -Version 2021.2.4
[HttpGet] [Route("GetReportFile/{fileName}")] public async Task<IActionResult> GetReportFile(string fileName) { var rootPath = _webHostEnverioment.WebRootFileProvider.GetDirectoryContents("/") .FirstOrDefault(x => x.Name == "Reports")?.PhysicalPath; var path = Path.Combine(rootPath!, fileName); var bytes = await System.IO.File.ReadAllBytesAsync(path); return Ok(bytes); }
@page "/" @using Stimulsoft.Base @using Stimulsoft.Report @using Stimulsoft.Report.Blazor @inject HttpClient Http <StiBlazorViewer Report="@report" /> @code { private StiReport report; protected override async Task OnInitializedAsync() { //Create empty report object report = new StiReport(); //Load report template // var reportBytes = await Http.GetByteArrayAsync("Reports/Report.mrt"); report.RegBusinessObject("MyList", GetBusinessObject()); var uri = $"/api/Report/GetReportFile/Report.mrt"; var reportFile=await Http.GetFromJsonAsync<byte[]>(uri); // var reportFile = await Http.GetByteArrayAsync("Report.mrt"); report.Load(reportFile); await report.Dictionary.SynchronizeAsync(); } public class BusinessEntity { public string Name { get; set; } public string Alias { get; set; } public BusinessEntity(string name, string alias) { Name = name; Alias = alias; } } private System.Collections.ArrayList GetBusinessObject() { var list = new System.Collections.ArrayList(); list.Add(new BusinessEntity("ali", "alias1")); list.Add(new BusinessEntity("reza", "alias2")); return list; } }
namespace DbConfig.Web.DomainClasses { public class ConfigurationValue { public int Id { get; set; } public string Key { get; set; } public string Value { get; set; } } }
public class MyAppContext : DbContext, IUnitOfWork { public MyAppContext(DbContextOptions options) : base(options) { } public virtual DbSet<ConfigurationValue> Configurations { set; get; }
protected override void OnModelCreating(ModelBuilder builder) { // it should be placed here, otherwise it will rewrite the following settings! base.OnModelCreating(builder); // Custom application mappings builder.Entity<ConfigurationValue>(entity => { entity.Property(e => e.Key).HasMaxLength(450).IsRequired(); entity.HasIndex(e => e.Key).IsUnique(); entity.Property(e => e.Value).IsRequired(); entity.HasData(new ConfigurationValue { Id = 1, Key = "key-1", Value = "value_from_ef_1" }); entity.HasData(new ConfigurationValue { Id = 2, Key = "key-2", Value = "value_from_ef_2" }); }); }
public class EFConfigurationSource : IConfigurationSource { private readonly IServiceProvider _serviceProvider; public EFConfigurationSource(IServiceProvider serviceProvider) { _serviceProvider = serviceProvider; } public IConfigurationProvider Build(IConfigurationBuilder builder) { return new EFConfigurationProvider(_serviceProvider); } }
public class EFConfigurationProvider : ConfigurationProvider { private readonly IServiceProvider _serviceProvider; public EFConfigurationProvider(IServiceProvider serviceProvider) { _serviceProvider = serviceProvider; ensureDatabaseIsCreated(); } public override void Load() { using (var scope = _serviceProvider.CreateScope()) { var uow = scope.ServiceProvider.GetRequiredService<IUnitOfWork>(); this.Data?.Clear(); this.Data = uow.Set<ConfigurationValue>() .AsNoTracking() .ToList() .ToDictionary(c => c.Key, c => c.Value); } } private void ensureDatabaseIsCreated() { using (var scope = _serviceProvider.CreateScope()) { var uow = scope.ServiceProvider.GetRequiredService<IUnitOfWork>(); uow.Migrate(); } } }
public static class EFExtensions { public static IConfigurationBuilder AddEFConfig(this IConfigurationBuilder builder, IServiceProvider serviceProvider) { return builder.Add(new EFConfigurationSource(serviceProvider)); } }
namespace DbConfig.Web { public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddScoped<IUnitOfWork, MyAppContext>(); services.AddScoped<IConfigurationValuesService, ConfigurationValuesService>(); var connectionString = Configuration.GetConnectionString("SqlServerConnection") .Replace("|DataDirectory|", Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "app_data")); services.AddDbContext<MyAppContext>(options => { options.UseSqlServer( connectionString, dbOptions => { var minutes = (int)TimeSpan.FromMinutes(3).TotalSeconds; dbOptions.CommandTimeout(minutes); dbOptions.EnableRetryOnFailure(); }); }); var serviceProvider = services.BuildServiceProvider(); var configuration = new ConfigurationBuilder() .AddConfiguration(Configuration) // Adds all of the existing configurations .AddEFConfig(serviceProvider) .Build(); services.AddSingleton<IConfigurationRoot>(sp => configuration); // Replace services.AddSingleton<IConfiguration>(sp => configuration); // Replace
namespace DbConfig.Web.Controllers { public class HomeController : Controller { private readonly IConfiguration _configuration; public HomeController(IConfiguration configuration) { _configuration = configuration; } public IActionResult Index() { return Json( new { key1 = _configuration["key-1"], key2 = _configuration["key-2"] }); }
public class ConfigurationValuesService : IConfigurationValuesService { private readonly IConfiguration _configuration; public ConfigurationValuesService(IConfiguration configuration) { _configuration = configuration; } private void reloadEFConfigurationProvider() { ((IConfigurationRoot)_configuration).Reload(); }
public bool AddOrUpdateOrDelete<TEntity>(TEntity newItem, bool updateIsNull) where TEntity : class { try { var dbMyNews = new dbMyNewsEntities(); if (updateIsNull) dbMyNews.Set<TEntity>().AddOrUpdate(newItem); else { dbMyNews.Set<TEntity>().Attach(newItem); var entry = dbMyNews.Entry(newItem); foreach ( var pri in newItem.GetType().GetProperties() .Where(pri => (pri.GetGetMethod(false).ReturnParameter.ParameterType.IsSerializable && pri.GetValue(newItem, null) != null))) { entry.Property(pri.Name).IsModified = true; } } dbMyNews.SaveChanges(); return true; } catch (Exception) { return false; } }
var news = new tblNews(); news.tblCategoryId = 2; news.tblNewsId = 1; MyNews.EditNews(news);
var news = MyNews.GetNews(1); news.tblCategoryId = 2; MyNews.EditNews(news)
dbMyNews.Entry(news).State = EntityState.Modified;
public int AddNews(tblNews News) { dbMyNews.tblNews.Add(News); dbMyNews.SaveChanges(); return News.tblNewsId; } public bool EditNews(tblNews News) { try { dbMyNews.Entry(News).State = EntityState.Modified; dbMyNews.SaveChanges(); return true; } catch (Exception exp) { return false; } } public bool DeleteNews(int tblNewsId) { try { tblNews News = dbMyNews.tblNews.FirstOrDefault(p => p.tblNewsId == tblNewsId); News.IsDeleted = true; dbMyNews.SaveChanges(); return true; } catch (Exception exp) { return false; } }
public bool AddOrEditNews(tblNews News) { return AddOrUpdateOrDelete(News, News.tblNewsId == 0); }
MyNews.AddOrEditNews (new tblNews { tblNewsId = 1, IsDeleted =true });
public static class AsyncHelper { private static readonly TaskFactory _taskFactory = new TaskFactory(CancellationToken.None, TaskCreationOptions.None, TaskContinuationOptions.None, TaskScheduler.Default); public static TResult RunSync<TResult>(Func<Task<TResult>> func) => _taskFactory .StartNew(func) .Unwrap() .GetAwaiter() .GetResult(); public static void RunSync(Func<Task> func) => _taskFactory .StartNew(func) .Unwrap() .GetAwaiter() .GetResult(); }
AsyncHelper.RunSync(() => client. IsAcceptAsync ( response , secretkey ));
create table Employees ( Id int auto_increment primary key, FirstName text null, LastName text null, DateOfBirth timestamp not null );
public class Employee { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public DateTimeOffset DateOfBirth { get; set; } } public class MyDbContext : DbContext { public DbSet<Employee> Employees { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder options) { options.UseMySQL(_configuration.GetConnectionString("DataConnection")); } }
اما در مدل EAV، خواص داینامیک را به درون جدول دومی منتقل خواهیم کرد:
create table EmployeeEav ( Id int auto_increment primary key ); create table EmployeeAttributes ( Id int auto_increment primary key, EmployeeId int not null, AttributeName text null, AttributeValue text null, constraint FK_EmployeeAttributes_EmployeeEav_EmployeeId foreign key (EmployeeId) references EmployeeEav (Id) on delete cascade ); create index IX_EmployeeAttributes_EmployeeId on EmployeeAttributes (EmployeeId);
تعریف جداول فوق نیز در Entity Framework به اینصورت خواهند بود:
public class EmployeeEav { public int Id { get; set; } public virtual ICollection<EmployeeAttribute> Attributes { get; set; } } public class EmployeeAttribute { public int Id { get; set; } public virtual EmployeeEav Employee { get; set; } public int EmployeeId { get; set; } public string AttributeName { get; set; } public string AttributeValue { get; set; } } public class MyDbContext : DbContext { public DbSet<EmployeeEav> EmployeeEav { get; set; } public DbSet<EmployeeAttribute> EmployeeAttributes { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder options) { options.UseMySQL(_configuration.GetConnectionString("DataConnection")); } }
SELECT `e`.`Id`, `e`.`DateOfBirth`, `e`.`FirstName`, `e`.`LastName` FROM `Employees` AS `e` WHERE `e`.`DateOfBirth` > @__endDate_0
var endDate = DateTimeOffset.Now.AddYears(Convert.ToInt32(-25)); var normalTypes = dbContext.Employees.Where(x => x.DateOfBirth > endDate).ToList();
SELECT MAX(CASE AttributeName WHEN 'FirstName' THEN AttributeValue END) AS FirstName, MAX(CASE AttributeName WHEN 'LastName' THEN AttributeValue END) AS LastName, MAX(CASE AttributeName WHEN 'DateOfBirth' THEN AttributeValue END) AS DateOfBirth FROM efcoresample.EmployeeAttributes WHERE EmployeeId IN (SELECT EmployeeId FROM efcoresample.EmployeeAttributes WHERE AttributeName = 'DateOfBirth' AND AttributeValue > DATE_SUB(CURRENT_DATE(), INTERVAL 25 YEAR)) AND AttributeName IN ('FirstName', 'LastName', 'DateOfBirth') GROUP BY EmployeeId;
string[] columnNames = {"FirstName", "LastName", "DateOfBirth"}; var employees = dbContext.EmployeeAttributes .Where(x => dbContext.EmployeeAttributes .Where(i => i.AttributeName == "DateOfBirth") .Select(eId => eId.EmployeeId).Contains(x.EmployeeId) && columnNames.Contains(x.AttributeName)) .GroupBy(x => x.EmployeeId) .Select(g => new { FirstName = g.Max(f => f.AttributeName == "FirstName" ? f.AttributeValue : ""), LastName = g.Max(f => f.AttributeName == "LastName"? f.AttributeValue : ""), DateOfBirth = g.Max(f => f.AttributeName == "DateOfBirth"? f.AttributeValue : ""), Id = g.Key }) .ToList() .Where(x => DateTime.ParseExact(x.DateOfBirth, "yyyy-MM-dd", CultureInfo.InvariantCulture) > DateTime.Now.AddYears(-25));