小编Fab*_*ber的帖子

使用带有WHERE IN的QueryOver的NHibernate

我会像这样创建一个QueryOver

SELECT *
FROM Table
WHERE Field IN (1,2,3,4,5)
Run Code Online (Sandbox Code Playgroud)

我尝试过Contains方法,但我遇到了异常

"System.Exception:无法识别的方法调用:System.String:Boolean包含(System.String)"

在这里我的代码

var qOver = _HibSession.QueryOver<MyModel>(() => baseModel)                                                                
  .JoinAlias(() => baseModel.Submodels, () => subModels)
  .Where(() => subModels.ID.Contains(IDsSubModels))
  .List<MyModel>();
Run Code Online (Sandbox Code Playgroud)

c# nhibernate where-in queryover

47
推荐指数
3
解决办法
5万
查看次数

.NET通过Reflection获取私有财产

我有以下情况

安装A

public abstract class MyBaseEntity        
{   
    //Uncompleted method     
    public void addChild<T>(T child)
    {            

        try
        {                
            Type tInfo = this.GetType();
            PropertyInfo pInfo = tInfo.GetProperties(BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance).Where(p => p.PropertyType == typeof(ISet<T>)).FirstOrDefault();                
            MethodInfo mInfo = tInfo.GetMethod("Add");
            mInfo.Invoke(this, new object[] {child});
        }
        catch (Exception ex)
        {               
            throw ex;
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

大会B.

 public class MyModel : MyBaseEntity
{
    public virtual int p1 { get; set; }
    public virtual int p2 { get; set; }
    public virtual DateTime p3 { get; set; …
Run Code Online (Sandbox Code Playgroud)

.net c# reflection properties

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

如何在接口中配置代码约定

我无法在课堂上配置代码合同.我已经按照文档和示例,但它不起作用.

我想将Code Contracts条件插入我的界面,这里是我的代码

界面

 [ContractClass(typeof(ArticleBLLContract))]
 public interface IArticleBLL
 {
    int getArticleNSheet(string IdBox);
    IEnumerable<IArticle> getArticleValue(string IdBox, string IdLanguage);
}
Run Code Online (Sandbox Code Playgroud)

合同类

[ContractClassFor(typeof(IArticleBLL))]
public sealed class ArticleBLLContract : IArticleBLL
{
    int IArticleBLL.getArticleNSheet(string IdBox)
    {
        Contract.Requires<ArgumentOutOfRangeException>(!String.IsNullOrEmpty(IdBox),"IdBox has no valid value");                        

        return default(int);
    }

    IEnumerable<Base.Article.IArticle> IArticleBLL.getArticleValue(string IdBox, string IdLanguage)
    {
        Contract.Requires<ArgumentOutOfRangeException>(!String.IsNullOrEmpty(IdBox), "IdBox has no valid value");
        Contract.Requires<ArgumentOutOfRangeException>(!String.IsNullOrEmpty(IdLanguage), "IdLanguagehas no valid value");

        Contract.Ensures(Contract.Result<IEnumerable<Base.Article.IArticle>>() != null, "Return value is out of Range");

        return default(IEnumerable<Base.Article.IArticle>);
    }        
}
Run Code Online (Sandbox Code Playgroud)

申请合同的班级

public class ArticleBLL : IArticleBLL
{

    public int getArticlNSheet(string IdBox) …
Run Code Online (Sandbox Code Playgroud)

c# interface code-contracts

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

NHibernate QueryOver使用别名的多个订单

这是我的情景:

 public IEnumerable<ISuperMerc> getSuperMercTree(string IDLanguage)
 {

      SuperMercModel SMer = null;
      SuperMercDescriptionModel descrSMer = null;
      MercModel Merc = null;
      MercDescriptionModel descrMerc = null;

      var qOver = _HibSession.QueryOver<SuperMercModel>(() => SMer)                    
                .JoinAlias(() => SMer.DescriptionsSM, () => descrSMer,JoinType.LeftOuterJoin)
                    .Where(() => descrSMer.IDLanguage == IDLanguage)
                .JoinAlias(() => SMer.Merc, () => Merc,JoinType.LeftOuterJoin)
                    .JoinAlias(() => Merc.DescriptionsMer, () => descrMerc,JoinType.LeftOuterJoin)
                        .Where(() => descrMerc.IDLanguage == IDLanguage)    
                .OrderByAlias(() => SMer.ID).Asc
                .ThenByAlias(() => descrMerc.Description).Asc 
                .Future<SuperMercModel>();

      return qOver;

 }
Run Code Online (Sandbox Code Playgroud)

我遇到了以下错误

无法解析属性:描述:SuperMercModel

奇怪的是,Description字段位于MercDescriptionModel类中,而不在SuperMercModel类中.

我正在使用别名来创建多连接和多个订单查询.

nhibernate alias sql-order-by queryover

4
推荐指数
2
解决办法
4956
查看次数

类构造方法中与IoC的代码契约

我是Code Contracts的新手,我对如何将它与IoC集成提出了疑问.我试图在简单的测试程序(经典的consolle项目)中使用Code Contracts,但现在我想在我的官方项目中使用它.问题是:如果我有一个容器在类的构造函数方法中提供我的服务接口,我如何使用代码约定来检查传递的值?

经典场景可能是

[ContractClass(typeof(ArticoliBLLContract))]
public interfare IMyInterface
{
 void method1(int a)
 void method2(string b)
 void method3(bool c)
}


[ContractClassFor(typeof(IArticoliBLL))]
public abstract class MyContractsClass : IMyInterface
{

 public void method1(int a)
 {
  Contract.Requires<ArgumentOutOfRangeException>(a > 0,"a must be > 0");                                                    
 }

 public void method2(string b)
 {
  Contract.Requires<ArgumentOutOfRangeException>(!String.IsNullOrEmpty(b),"b must be not empty");                                    
 }

 public void method3(bool c)
 {
  Contract.Requires<ArgumentOutOfRangeException>(c == true,"c must be true");                                    
 }
}


 public class MyClass : IMyInterface
 {
  private ITFactory _factory = null;
  private IMyDAL _myDAL = null; …
Run Code Online (Sandbox Code Playgroud)

c# constructor ioc-container code-contracts

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

NHibernate QueryOver对变量的Restrinctions

我有一点问题:我会在QueryOver中插入一个条件来检查变量值.像这样的东西:

 var qOver = QueryOver.Of<MyModel>(() => myMod)
                .JoinAlias(() => myMod.SubMod, () => subMod, JoinType.LeftOuterJoin)
                    .Where(Restrictions.Or(
                        Restrictions.On(() => myMod.ID).IsIn(MyIDList)
                        , Restrictions.On(MyIDList == null))
Run Code Online (Sandbox Code Playgroud)

在SQL sintax中有类似的东西

WHERE @Variable = '' OR MyTable.MyField = @Variable
Run Code Online (Sandbox Code Playgroud)

所以,如果我的变量已填满,我将过滤我的字段.如果我的变量为空(或为空),我将选择每个记录而不过滤任何内容.

如何使用QueryOver和Restrinctions达到此结果?谢谢!

nhibernate restrictions queryover

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