小编Ham*_*d F的帖子

(最佳实践)FluentValidation和检查重复实体

我有一个带有3个主键的表(联结表),因此当我想检查重复记录时,我必须一起检查3个属性

我写了一个像这样的方法

    private bool IsDuplicate(long roleId, long componentGroupId, long operationId)
    {
        var business = new RoleGroupBusiness();
        var result = business.Where(x => x.RoleID == roleId && x.ComponentGroupID == componentGroupId && x.OperationID == operationId).Any();
        return result;
    }
Run Code Online (Sandbox Code Playgroud)

我有一个像这样的FluentValidator类:

public class RoleGroupValidator : AbstractValidator<RoleGroup>
{

    private bool IsDuplicate(long roleId, long componentGroupId, long operationId)
    {
        var business = new RoleGroupBusiness();
        var result = business.Where(x => x.RoleID == roleId && x.ComponentGroupID == componentGroupId && x.OperationID == operationId).Any();
        return result;
    }
    public RoleGroupValidator()
    {
        RuleFor(x => …
Run Code Online (Sandbox Code Playgroud)

c# validation fluentvalidation

8
推荐指数
2
解决办法
3701
查看次数

Expression.Like in C#

例如:x => x.Name ="g"

我有这样的代码块

public Expression<Func<TEntity, bool>> SearchExpression()
{
    var c = new ConstantExpression[_paramList.Count];
    var b = new BinaryExpression[_paramList.Count];
    BinaryExpression comparisonExpression = null;

    var entity = Expression.Parameter(typeof(TEntity));

    for (int i = 0; i < _paramList.Count; i++)
    {
        var value = Convert.ChangeType(_paramList[i].Item2 /*"g"*/, _paramList[i].Item3 /*System.String*/);
        c[i] = Expression.Constant(value); //"g"

        // PROBLEM IS HERE
        b[i] = Expression.Equal(Expression.Property(entity, _paramList[i].Item1 /*Name*/, c[i]);
        // PROBLEM IS HERE



    }
    _paramList.Clear();
    comparisonExpression = b.Aggregate(Expression.And);
    return Expression.Lambda<Func<TEntity, bool>>(comparisonExpression, entity);
}
Run Code Online (Sandbox Code Playgroud)

像魅力一样工作,但我需要Expression.Like (喜欢"g"不等于"g")

Expression.Like(Expression.Property(entity, _paramList[i].Item1), c[i])
Run Code Online (Sandbox Code Playgroud)

但是C#表达式树不支持Like方法 …

c# expression-trees sql-like

8
推荐指数
2
解决办法
3169
查看次数

获得像Dapper.NET一样的Entity Framework 6的最佳性能

我使用dapper.net作为微观,速度和性能非常棒!

Dapper中的简单CRUD操作比实体框架6更快.

速度比较-小巧玲珑-VS-实体框架

但如果我想要像Dapper这样的Entity Framework 6的速度和性能,我该怎么办?

我不需要Entity Framework 6的所有高级功能

我可以禁用某些功能来提高Entity Framework 6的速度和性能吗?哪一个 ?

哪些功能成本高,并且提高了禁用它们的速度?(请明确说明)

c# performance entity-framework crud dapper

7
推荐指数
1
解决办法
2万
查看次数

如何获取antlr解析的错误信息?

我用 antlr 4.4 写了一个语法,如下所示:

grammar CSV;

file
  :  row+ EOF
  ;

row
  :  value (Comma value)* (LineBreak | EOF)
  ;

value
  :  SimpleValueA
  |  QuotedValue
  ;

Comma
  :  ','
  ;

LineBreak
  :  '\r'? '\n'
  |  '\r'
  ;

SimpleValue
  :  ~(',' | '\r' | '\n' | '"')+
  ;

QuotedValue
  :  '"' ('""' | ~'"')* '"'
  ;
Run Code Online (Sandbox Code Playgroud)

然后我使用antlr 4.4生成解析器和词法分析器,这个过程成功

生成类后,我编写了一些使用语法的java代码

import org.antlr.v4.runtime.ANTLRInputStream;
import org.antlr.v4.runtime.CommonTokenStream;

public class Main {

    public static void main(String[] args)
    {
        String source =  "\"a\",\"b\",\"c";
        CSVLexer lex = new …
Run Code Online (Sandbox Code Playgroud)

java parsing antlr lexer antlr4

6
推荐指数
1
解决办法
4475
查看次数

从EDMX分离实体类(DTO)的实用方法

我有一个三层应用程序

DAL具有EDMX文件,EF6会由EF6自动从数据库生成(DB First模式)。我也有BLL和UL层。

但是,当我想在UI中使用BLL方法时,必须将DAL程序集添加到UI层(由于方法的返回类型)

List<Person> 
Run Code Online (Sandbox Code Playgroud)

EDMX(DAL)中的人定义] (这是我的问题)

如何将类(DTO)与EDMX文件分开,并创建为单独的程序集?

如何防止将DAL程序集(整个EDMX)添加到UI层?

c# entity-framework three-tier edmx

5
推荐指数
1
解决办法
882
查看次数

如何将WebApi中的AuthorizationFilterAttribute与WebClient库一起使用?

我使用以下代码进行授权(我在互联网上找到了它,并对其进行更改以供使用)

当我致电我的网址时,似乎授权有效 在此处输入图片说明

    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false)]
    public class ClientAuthorizationAttribute : AuthorizationFilterAttribute
    {
        private bool _active = true;

        public ClientAuthorizationAttribute()
        {

        }

        public ClientAuthorizationAttribute(bool active)
        {
            _active = active;
        }

        public override void OnAuthorization(HttpActionContext actionContext)
        {
            if (_active)
            {
                var identity = ParseAuthorizationHeader(actionContext);
                if (identity == null)
                {
                    Challenge(actionContext);
                    return;
                }


                if (!OnAuthorizeUser(identity.Name, identity.Password, actionContext))
                {
                    Challenge(actionContext);
                    return;
                }

                var principal = new GenericPrincipal(identity, null);

                Thread.CurrentPrincipal = principal;
                base.OnAuthorization(actionContext);
            }
        }

        protected virtual bool OnAuthorizeUser(string clientId, string authId, HttpActionContext …
Run Code Online (Sandbox Code Playgroud)

c# authentication authorization webclient asp.net-web-api

3
推荐指数
1
解决办法
2万
查看次数