我正在尝试映射没有标识符的视图,但是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) 我有以下扩展方法:
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) 我正在构建一个流畅的接口,其中我有一个包含大量流畅逻辑的基类,以及一个添加了一些特殊行为的派生类.我面临的问题是从派生类型的实例调用时基类中的流畅方法的返回类型.在调用基类的方法之后,只有基类的方法仍然可用于进一步的流畅调用.
更改调用方法的顺序将有助于编译,但它使其可读性降低,这对于流畅的接口来说是有意义的.有没有办法为基类定义某种"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) 最近发布的Fluent Nhibernate(1.1)现在支持存储过程.我想知道是否有人在那里找到了关于如何做到这一点的任何好的博客文章!
我不是要问使用经典的hbm映射而是先前问过这些问题:
我无法访问以下链接的文档:
http://support.fluentnhibernate.org/discussions/help/18-stored-procedure John Peterson的博客文章似乎也没有用.
任何帮助将不胜感激.我想在过渡时期我可以使用旧的hbm映射方法 - 但如果可以的话,我宁愿使用流畅的nhibernate.
我正在尝试为以下条件设置流畅的断言.但是找不到带有表达式的方法或带有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) 我正在构建一个简单的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) 我在使用多对多关系的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映射页面都以相同的方式编写,所以任何想法?
我是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表,用户可以拥有多个角色:
我假设在这个问题中所做的是正确的方法,除了作者使用多对多连接.我试过这种方式,但u => u.users的部分给了我一个错误(我假设这是因为模型中没有用户属性,所以他回答了他的问题,但没有更新他的问题?)
我的问题:让Ef为我生成这个表的确切流畅的api代码是什么?
我不确定的事情:(随意忽略)
嗨,我遇到了问题.
我想实现构建器模式以使创建对象更容易.我面临的问题与嵌套对象有关.我想要创建的对象中有一个其他对象的列表,我真的不知道如何解决它.
我希望能够执行以下操作(例如,更简单的对象):
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)
示例应该代表我的情况,尽管如果有多种类型的嵌套对象.
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,我还没有看到它在其他地方完成。