آقای نصیری به نظر شما آیا LLBLGEN مناسب تر و بهتر از orm های دیگر مثل Entity framework و NHibernate هستش
ممنون می شم یک مقایسه کلی کنید
create procedure test (@pid int)
as
select * from Sales.SalesOrderDetail
where ProductID = @pid
create procedure test (@pid int)
as
Declare @mpid int
Set @mpid = @pid
select * from Sales.SalesOrderDetail
where ProductID = @mpid
OPTION (OPTIMIZE FOR(@pid = 544))
create procedure test (@pid int)
as
select * from Sales.SalesOrderDetail
where ProductID = @pid
OPTION(OPTIMIZE FOR (@pid UNKNOWN))
Although most of the attention is on .NET Core, development continues on the original .NET Framework. Microsoft has recently released a preview of .NET Framework 4.7.2 with updates to ASP.NET, ADO.NET, WCF, WPF, and even Windows Forms. You can see the complete release notes on GitHub.
As anyone in the .NET community who hasn't been living under a rock will know, there's a lot of exciting things happening with .NET at the moment with the announcement of the open source, cross platform, .NET Core. However, partly due to the very open nature of its evolution, there's been a whole host of names associated with its development - vNext, ASP.NET 5, ASP.NET Core, .NET generations etc.
In this post I'm going to try and clarify some of the naming and terminology surrounding the evolution of the .NET framework. I'll discuss some of the challenges the latest iteration is attempting to deal with and how the latest developments aim to address these.
This is really for those that have seen some of the big announcements but aren't sure about the intricacies of this new framework and how it relates to the existing ecosystem, which was my situation before I really started digging into it all properly!
Hopefully by the end of this article you'll have a clearer grasp of the latest in .NET!
namespace ASPNETCoreIdentitySample.DataLayer.Mappings { public class RoleConfiguration : IEntityTypeConfiguration<Role> { private readonly SiteSettings _siteSettings; private readonly ILookupNormalizer _keyNormalizer; public RoleConfiguration(SiteSettings siteSettings, ILookupNormalizer keyNormalizer) { _siteSettings = siteSettings ?? throw new ArgumentNullException(nameof(siteSettings)); _keyNormalizer = keyNormalizer ?? throw new ArgumentNullException(nameof(keyNormalizer)); } public void Configure(EntityTypeBuilder<Role> builder) { builder.ToTable("AppRoles"); var adminUserSeed = _siteSettings.AdminUserSeed; builder.HasData( new Role { Id = 1, Name = adminUserSeed.RoleName, NormalizedName = _keyNormalizer.NormalizeName(adminUserSeed.RoleName), ConcurrencyStamp = Guid.NewGuid().ToString() }); } } }
public class UserConfiguration : IEntityTypeConfiguration<User> { private readonly SiteSettings _siteSettings; private readonly ILookupNormalizer _keyNormalizer; private readonly IPasswordHasher<User> _passwordHasher; public UserConfiguration( SiteSettings siteSettings, ILookupNormalizer keyNormalizer, IPasswordHasher<User> passwordHasher) { _siteSettings = siteSettings ?? throw new ArgumentNullException(nameof(siteSettings)); _keyNormalizer = keyNormalizer ?? throw new ArgumentNullException(nameof(keyNormalizer)); _passwordHasher = passwordHasher ?? throw new ArgumentNullException(nameof(passwordHasher)); } public void Configure(EntityTypeBuilder<User> builder) { builder.ToTable("AppUsers"); var adminUserSeed = _siteSettings.AdminUserSeed; builder.HasData( new User { Id = 1, UserName = adminUserSeed.Username, NormalizedUserName = _keyNormalizer.NormalizeName(adminUserSeed.Username), Email = adminUserSeed.Email, NormalizedEmail = _keyNormalizer.NormalizeEmail(adminUserSeed.Email), EmailConfirmed = true, IsEmailPublic = true, LockoutEnabled = true, TwoFactorEnabled = false, PasswordHash = _passwordHasher.HashPassword(null, adminUserSeed.Password), ConcurrencyStamp = Guid.NewGuid().ToString(), SecurityStamp = string.Empty, IsActive = true }); } }
public class UserRoleConfiguration : IEntityTypeConfiguration<UserRole> { public void Configure(EntityTypeBuilder<UserRole> builder) { builder.HasOne(userRole => userRole.Role) .WithMany(role => role.Users) .HasForeignKey(userRole => userRole.RoleId); builder.HasOne(userRole => userRole.User) .WithMany(user => user.Roles) .HasForeignKey(userRole => userRole.UserId); builder.ToTable("AppUserRoles"); builder.HasData( new UserRole { UserId = 1, RoleId = 1 }); } }
public class ApplicationDbContextFactory : IDesignTimeDbContextFactory<ApplicationDbContext> { public ApplicationDbContext CreateDbContext(string[] args) { // .... services.TryAddScoped<ILookupNormalizer, UpperInvariantLookupNormalizer>(); services.TryAddScoped<IPasswordHasher<User>, PasswordHasher<User>>();
using Microsoft.EntityFrameworkCore.Infrastructure; namespace ASPNETCoreIdentitySample.DataLayer.Context { public class ApplicationDbContext : IdentityDbContext<User, Role, int, UserClaim, UserRole, UserLogin, RoleClaim, UserToken>, IUnitOfWork { public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); var siteSettings = this.GetService<IOptionsSnapshot<SiteSettings>>()?.Value; var lookupNormalizer = this.GetService<ILookupNormalizer>(); var passwordHasher = this.GetService<IPasswordHasher<User>>() modelBuilder.ApplyConfiguration(new RoleConfiguration(siteSettings, lookupNormalizer)); modelBuilder.ApplyConfiguration(new UserConfiguration(siteSettings, lookupNormalizer, passwordHasher)); modelBuilder.ApplyConfiguration(new UserUsedPasswordConfiguration(siteSettings, passwordHasher)); // ...
dotnet ef migrations --startup-project ../ASPNETCoreIdentitySample/ add V1
var department = (from d in context.Departments where d.Name == DepartmentNames.English select d).FirstOrDefault();