标签: fluent

流畅的NHibernate获取视图,没有唯一标识符

我正在尝试映射没有标识符的视图,但是nhibernate仍会生成带有id列的sql(给我一个sql错误,因为db列中不存在ID列).也许我误解了Id()构造函数?

构造函数评论:

创建在域对象或数据库中的列中没有相应属性的Id.这主要用于只读访问和/或视图.默认为带有"增量"生成器的int标识.

public class PersonMapping : ClassMap<Person>
{
    public PersonMapping()
    {
        Table("person");
        ReadOnly();

        Id();
        Map(f => f.Name, "name");
    }
}
Run Code Online (Sandbox Code Playgroud)

nhibernate fluent

12
推荐指数
2
解决办法
3977
查看次数

用于流畅API的类型推断

我有以下扩展方法:

public static IFoo Foo(this IFluentApi api, Action action);

public static IFoo<TResult> Foo<TResult>(
    this IFluentApi api, Func<TResult> func);

public static IBar Bar(this IFoo foo);

public static void FooBar(this IBar bar, Action action);

public static void FooBar<TResult>( // <- this one cannot work as desired 
    this IBar bar, Action<TResult> action);
Run Code Online (Sandbox Code Playgroud)

通用接口始终从其对应的非通用接口派生.

不幸的是,为了使这项工作:

api.Foo(x => ReturnLong())
   .Bar()
   .FooBar(x => ...); // x should be of type long
Run Code Online (Sandbox Code Playgroud)

我还需要实现以下扩展方法:

public static IBar<TResult> Bar<TResult> (this IFoo<TResult> foo);
Run Code Online (Sandbox Code Playgroud)

并将上述最后一个扩展方法更改为:

public static void FooBar<TResult>(
    this IBar<TResult> …
Run Code Online (Sandbox Code Playgroud)

c# generics fluent-interface fluent

12
推荐指数
1
解决办法
599
查看次数

适用于流利课程的通用'TThis'

我正在构建一个流畅的接口,其中我有一个包含大量流畅逻辑的基类,以及一个添加了一些特殊行为的派生类.我面临的问题是从派生类型的实例调用时基类中的流畅方法的返回类型.在调用基类的方法之后,只有基类的方法仍然可用于进一步的流畅调用.

更改调用方法的顺序将有助于编译,但它使其可读性降低,这对于流畅的接口来说是有意义的.有没有办法为基类定义某种"This"类型,以便所有方法返回相同的类型.

public class Field<T>
{
    public Field<T> Name( string name )
    {
        _name = name;
        return this;
    }
}

public SpecialField<T> : Field<T>
{
    public SpecialField<T> Special(){ return this; }
}


// !!! Arrgh. Special is not a member of the Field<T> class.
var specialField = new SpecialField()
    .Name( "bing" )
    .Special();
Run Code Online (Sandbox Code Playgroud)

破解

我尝试通过执行类似下面的操作来解决它,但它无效C#:(但至少表达了我想如何编码接口.

public class Field<T,TThis> : TThis
    where TThis : Field<T,TThis>
{
    public TThis Name( string name ){...}
}

public SpecialField<T> : Field<T,SpecialField<T>>
{
    public TThis …
Run Code Online (Sandbox Code Playgroud)

c# generics fluent-interface fluent

11
推荐指数
1
解决办法
1353
查看次数

任何人都知道有关Fluent Nhibernate 1.1的存储过程的任何合适的资源

最近发布的Fluent Nhibernate(1.1)现在支持存储过程.我想知道是否有人在那里找到了关于如何做到这一点的任何好的博客文章!

我不是要问使用经典的hbm映射而是先前问过这些问题:

Fluent-NHibernate是否支持映射到过程?

流利的NHibernate和存储过程

我无法访问以下链接的文档:

http://support.fluentnhibernate.org/discussions/help/18-stored-procedure John Peterson的博客文章似乎也没有用.

任何帮助将不胜感激.我想在过渡时期我可以使用旧的hbm映射方法 - 但如果可以的话,我宁愿使用流畅的nhibernate.

c# nhibernate fluent nhibernate-mapping fluent-nhibernate

11
推荐指数
1
解决办法
898
查看次数

OR条件的流畅断言

我正在尝试为以下条件设置流畅的断言.但是找不到带有表达式的方法或带有Or()的ObjectAssertion.

我得检查我的服务状态是枚举值Pending还是Active

services.Should().HaveCount(totalServices).And.BeOfType<Service>().Which.ServiceStatusKey.Should().Be(Status.Pending);
Run Code Online (Sandbox Code Playgroud)

我想要的东西,

.Be(Status.Pending).Or().Be(Status.Active)
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我实现这一目标.

FluentAsserstions版本:4.1.1(Nuget的最新内容)附加4.1 FluentAssertions.Primitive命名空间.

 // Decompiled with JetBrains decompiler
// Type: FluentAssertions.Primitives.ObjectAssertions
// Assembly: FluentAssertions.Core, Version=4.1.1.0, Culture=neutral, PublicKeyToken=33f2691a05b67b6a
// MVID: 090116C5-E9A5-4878-B62E-DE0EBFEBBE14
// Assembly location: C:\RA\P4V\BOSS\trunk\M5Portal\packages\FluentAssertions.4.1.1\lib\net45\FluentAssertions.Core.dll

using FluentAssertions;
using FluentAssertions.Common;
using FluentAssertions.Execution;
using System;
using System.Diagnostics;

namespace FluentAssertions.Primitives
{
  /// <summary>
  /// Contains a number of methods to assert that an <see cref="T:System.Object"/> is in the expected state.
  /// 
  /// </summary>
  [DebuggerNonUserCode]
  public class ObjectAssertions : ReferenceTypeAssertions<object, ObjectAssertions>
  {
    /// <summary>
    /// Returns the …
Run Code Online (Sandbox Code Playgroud)

c# fluent assertions fluent-assertions

11
推荐指数
2
解决办法
3437
查看次数

如何构建Fluent嵌套Guard API

我正在构建一个简单的Guard API来防止传递给函数的非法参数等.

我有以下代码:

public static class Guard
{
    public static GuardArgument<T> Ensure<T>(T value, string argumentName)
    {
        return new GuardArgument<T>(value, argumentName);
    }
}

public class GuardArgument<T>
{
    public GuardArgument(T value, string argumentName)
    {
        Value = value;
        Name = Name;
    }

    public T Value { get; private set; }
    public string Name { get; private set; }
}

// Example extension for validity checks
public static GuardArgument<T> IsNotNull<T>(this GuardArgument<T> guardArgument, string errorMessage)
{
    if (guardArgument.Value == null)
    {
        throw new ArgumentNullException(guardArgument.Name, errorMessage); …
Run Code Online (Sandbox Code Playgroud)

c# lambda fluent

11
推荐指数
1
解决办法
441
查看次数

流畅的NHibernate HasManyToMany()映射

我在使用多对多关系的Fluent NHibernate示例中遇到了问题.我试图找出类似案例的例子,我发现了吨,但我仍然遇到同样的问题.

运行测试项目时,抛出以下异常:

NHibernate.PropertyAccessException:发生异常project.Entities.User.UserName ---> System.Reflection.TargetException:Object与目标类型不匹配.

这是表格的图像:

表

和代码

 public UsersMap()
    {

        this.Table("Users");
        Id(x => x.UserName).Column("Username").GeneratedBy.Assigned();

        Map(x => x.FirstName);
        Map(x => x.LastName);
        Map(x => x.Password);
        Map(x =>x.EMail);
        Map(x => x.Title);
        Map(x => x.Division);


        HasManyToMany<User>(x => x.Roles)
            .Table("UserInRoles").ParentKeyColumn("Username")
            .ChildKeyColumn("Usernamepk")
           .Cascade.SaveUpdate().LazyLoad();


    }

  public RolesMap()
    {
        this.Table("Roles");
        Id(x => x.ID).GeneratedBy.Assigned().Column("ID");
        Map(x => x.RoleName).Length(50);

        HasManyToMany<User>(x => x.Users)
            .Table("UserInRoles").ParentKeyColumn("ID")
            .ChildKeyColumn("RoleIdpk").Cascade.SaveUpdate().LazyLoad();

    }
Run Code Online (Sandbox Code Playgroud)

这里是代码,Web上的大多数示例和Fluent Nhibernate映射页面都以相同的方式编写,所以任何想法?

mapping nhibernate orm fluent

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

如何使用Fluent API使用Entity Framework Code First映射到查找表

我是asp.net mvc和实体框架代码的第一个apporach新手,我不是那么热衷于数据库.我提前为错误的术语或我理解事物的方式道歉.

现在回答这个问题.我有以下模型:
用户模型

 public class User
{
    public int UserId { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }

    public int RoleId { get; set; }

    [ForeignKey("RoleId")]
    public virtual IEnumerable<Role> Roles { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

榜样

 public class Role
{
    public int RoleId { get; set; }
    public string RoleName { get; set; }       
}
Run Code Online (Sandbox Code Playgroud)

我最终想要的是一种方法,使用Ef codefirst方法和流畅的API将UserId和RoleId映射到具有一对多关系的User_Role表,用户可以拥有多个角色: User_Role查找表

我假设在这个问题中所做的是正确的方法,除了作者使用多对多连接.我试过这种方式,但u => u.users的部分给了我一个错误(我假设这是因为模型中没有用户属性,所以他回答了他的问题,但没有更新他的问题?)

我的问题:让Ef为我生成这个表的确切流畅的api代码是什么?

我不确定的事情:(随意忽略)

  • 这是我的问题的正确方法吗?
  • 一旦我有了查找表,这仍然是声明我的导航属性的正确方法,以便我以后可以像user.Roles一样使用它并检索他们的角色吗?
  • 从Roles表或User_Role中填充User模型中的RoleId?
  • 在查找表中有ID有用吗? …

database fluent ef-code-first asp.net-mvc-4

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

与嵌套对象的生成器模式

嗨,我遇到了问题.

我想实现构建器模式以使创建对象更容易.我面临的问题与嵌套对象有关.我想要创建的对象中有一个其他对象的列表,我真的不知道如何解决它.

我希望能够执行以下操作(例如,更简单的对象):

Receipt RestaurantReceipt = new ReceiptBuilder()
.withDate("value")
.withName("value")
.AddItem("value")
    .WithIngredients("value")
    .WithType("value")
.AddItem("value")
    .WithIngredients("value")
    .WithType("value")
.build();
Run Code Online (Sandbox Code Playgroud)

或类似的东西:

Receipt RestaurantReceipt = new ReceiptBuilder()
.withDate("value")
.withName("value")
.AddItem("value", item => {
  .WithIngredients("value")
  .WithType("value")
})
.AddItem("value", item => {
  .WithIngredients("value")
  .WithType("value")
})
.build();
Run Code Online (Sandbox Code Playgroud)

示例应该代表我的情况,尽管如果有多种类型的嵌套对象.

c# design-patterns fluent method-chaining builder-pattern

10
推荐指数
1
解决办法
2684
查看次数

类方法返回`this`是不好的做法吗?

public class Chain
{
    public string ChainString;

    public Chain() 
    {
        ChainString = "{}"; 
    }

    public Chain AddLink()
    {
        ChainString += "-{}";
        return this; // is this a bad idea?
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,该AddLink方法返回this. 我想这样做的原因是为了更易读的实例化,如下所示。

// more verbose (here, `AddLink` returns void)
Chain myChain = new Chain();
myChain.AddLink();
myChain.AddLink();
myChain.AddLink();
// myChain.ChainString = "{}-{}-{}-{}"
Run Code Online (Sandbox Code Playgroud)
// nicer
Chain myChain = new Chain()
    .AddLink()
    .AddLink()
    .AddLink();
// myChain.ChainString = "{}-{}-{}-{}"
Run Code Online (Sandbox Code Playgroud)

有什么理由我不应该这样做吗?我想不出任何,但感觉有点hacky,我还没有看到它在其他地方完成。

c# oop return fluent this

10
推荐指数
1
解决办法
211
查看次数