我需要创建一个命名查询,并将其与其中一个地图一起使用,我目前已将其定义为流畅的地图.
是否可以继续使用流畅的地图,并能够在代码中动态创建命名查询?或者,切换到hbm地图唯一的选择?
我在Java中使用Apache的HttpClient Fluent Facade中的一些示例代码供开发人员扩展.他们真的很喜欢流利的外观,能够打电话:
this.body = Request.Get(uri.build()).execute().returnContent().asString();
Run Code Online (Sandbox Code Playgroud)
另外,我可以通过调用获取状态代码:
this.statusCode = Request.Get(uri.build()).execute().returnResponse().getStatusLine().getStatusCode();
Run Code Online (Sandbox Code Playgroud)
不幸的是,有几个实例我需要除了正文之外的状态代码.根据这个问题,我看到我可以让他们学习HttpClient对象 -
HttpResponse response = client.execute(httpGet);
String body = handler.handleResponse(response);
int code = response.getStatusLine().getStatusCode();
Run Code Online (Sandbox Code Playgroud)
但是,这意味着初始化HttpClient对象并且似乎拒绝了Fluent接口和Request.Get(或Post)语法.有没有办法同时获取状态代码和正文而不会丢失Fluent语法并且不进行两次离散调用?
我有一个引用自己的表,但我正在努力获得我想要的映射.我希望能够将儿童定义为拥有母亲,父亲和/或监护人的特定人的集合.守护者可能是父亲或母亲.
我希望能够看到人们被列入名单的人们可以浏览的树状图; 用户可以扩展一个人的节点以显示该人的所有孩子,而不管儿童定义的关系(母亲,父亲或监护人).
public partial class Person
{
[Key]
public int ID { get; set; }
[StringLength(100)]
public string Name { get; set; }
public int? GuardianID { get; set; }
[Column("MotherID")]
public int? MotherID { get; set; }
[Column("FatherID")]
public int? FatherID { get; set; }
[ForeignKey("MotherID")]
public virtual tblPerson Mother { get; set; }
[ForeignKey("FatherID")]
public virtual tblPerson Father { get; set; }
[ForeignKey("GuardianID")]
public virtual tblPerson Guardian { get; set; }
[InverseProperty("Guardian")]
[InverseProperty("Father")]
[InverseProperty("Mother")]
public virtual IEnumerable<tblPerson> …Run Code Online (Sandbox Code Playgroud) entity-framework fluent data-annotations self-referencing-table
如果使用Fluent NHibernate,是否可以自动化大多数类,但是指定应该使用常规流畅的API映射几个特定的类而不是自动化?如果是这样,有人能指出一些示例代码,说明如何做到这一点吗?
谢谢!
我需要一些帮助才能完成关于正则表达式的想法.
关于SE上正则表达式的更好语法有一个问题,但我认为我不会使用流畅的语法.这对新手来说肯定不错,但是如果是复杂的正则表达式,你会用一整页稍微好一点的胡言乱语来代替一行乱码.我喜欢Martin Fowler的方法,其中正则表达式由较小的部分组成.他的解决方案是可读的,但手工制作; 他提出了一种聪明的方法来构建复杂的正则表达式而不是支持它的类.
我正试图用类似的东西来上课(首先看他的例子)
final MyPattern pattern = MyPattern.builder()
.caseInsensitive()
.define("numberOfPoints", "\\d+")
.define("numberOfNights", "\\d+")
.define("hotelName", ".*")
.define(' ', "\\s+")
.build("score `numberOfPoints` for `numberOfNights` nights? at `hotelName`");
MyMatcher m = pattern.matcher("Score 400 FOR 2 nights at Minas Tirith Airport");
System.out.println(m.group("numberOfPoints")); // prints 400
Run Code Online (Sandbox Code Playgroud)
其中fluent语法用于组合扩展的regex,如下所示:
`name` 创建一个命名组
`:name` 创建一个非捕获组
(?:......)`-name` 创建一个反向引用
~ @#%")"
+或(将是非常混乱,所以这是不允许的define('#', …鉴于以下类别:
public class Address : Place
{
public virtual string Street { get; set; }
public virtual int Number { get; set; }
public override string WhereAmI
{
get { string.Format("{0} {1}", Street , Number); }
}
}
public abstract class Place : DomainEntity
{
public abstract string WhereAmI { get; }
}
Run Code Online (Sandbox Code Playgroud)
当我使用此映射时:
var autoMap = AutoMap.AssemblyOf<Party>()
.Override<Place>(map => map.IgnoreProperty(p => p.WhereAmI))
.Override<Address>(map => map.IgnoreProperty(p => p.WhereAmI))
.Where(type => type.Namespace != null && type.Namespace.Contains("Models"));
Run Code Online (Sandbox Code Playgroud)
我仍然得到错误:无法在"地址"类中找到属性'WhereAmI'的setter
我做的事情:
我在WPF应用程序中有一个简单的实体类,基本上如下所示:
public class Customer : MyBaseEntityClass
{
private IList<Order> _Orders;
public virtual IList<Order> Orders
{
get { return this._Orders; }
set {this._Orders = new ObservableCollection<Order>(value);}
}
}
Run Code Online (Sandbox Code Playgroud)
我还在离线实用程序中使用Fluent自动化程序来创建NHibernate配置文件,然后在运行时加载该文件.这一切都运行良好,但由于我没有将原始集合传递回NHibernate这一事实有明显的性能影响,所以我试图添加一个约定来让NHibernate为我创建集合:
public class ObservableListConvention : ICollectionConvention
{
public void Apply(ICollectionInstance instance)
{
Type collectionType =
typeof(uNhAddIns.WPF.Collections.Types.ObservableListType<>)
.MakeGenericType(instance.ChildType);
instance.CollectionType(collectionType);
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我正在使用其中一个uNhAddIns集合,我理解它应该为约定和INotification更改提供支持,但出于某种原因,这样做似乎打破了延迟加载.如果我加载这样的自定义记录...
var result = this.Session.Get<Customer>(id);
Run Code Online (Sandbox Code Playgroud)
...然后Orders字段确实被分配了PersistentObservableGenericList类型的实例,但其EntityId和EntityName字段为null,并且尝试扩展订单会导致可怕的"非法访问加载集合"消息.
任何人都可以告诉我我做错了什么和/或我需要做些什么才能让它发挥作用?我是否正确假设原始代理对象(通常包含延迟加载Orders成员所需的客户ID)正在被未跟踪正确对象的uNhAddIns集合项替换?
更新:我已经创建了一个演示此问题的测试项目,它没有直接引用uNhAddins项目,但是手动添加了集合类.它应该非常简单,但它基本上是从域创建数据库,添加带有子列表的记录,然后尝试使用集合类作为子列表的实现将其加载回另一个会话.由于延迟加载失败而抛出断言.
如何在LINQ中将两个查询联合到流畅的NHibernate?
它们返回相同的类型,但查询位于不同的实体上:
IQueryable<Event> eventQuery1 = session.Query<Event>().Where(e => e.EventType.Id == eventTypeId);
IQueryable<Event> eventQuery2 = session.Query<Nomination>().Select(n => n.Event).Distinct();
Run Code Online (Sandbox Code Playgroud)
我尝试了Union()和Concat()方法但是它们失败了:
eventQuery1 = eventQuery1.Union(eventQuery2);
The UnionResultOperator result operator is not current supported
Run Code Online (Sandbox Code Playgroud)
我不想从数据库加载对象然后应用concat,我希望在从数据库返回对象之前完成它,以便我可以在union的最终列表中应用一些Fetches.
我一直试图遇到Neo4j的查询语言Cypher的查询构建器,理想情况下使用流畅的API.我没有找到太多,并决定花一些时间自己建一个.
到目前为止,结果是Cypher 1.9规范的流畅的API查询构建器.
在发布代码之前,我想使用StackOverflow开始讨论,看看有什么想法.
这是一个演示查询,您希望使用Cypher发送给Neo4j.
向我展示John知道谁知道谷歌软件工程师的所有人(Google公司代码假定为12345).John和将他连接到Google员工的人之间的关系强度至少应为3(假设范围为1-5).返回John的所有关系以及他们在Google上认识的人,包括这些人之间的关系.按约翰的连接名称按升序对结果进行排序,然后按关系强度按降序排序.
使用Fluent-Cypher:
Cypher
.on(Node.named("john").with(Index.named("PERSON_NAMES").match(Key.named("name").is("John"))))
.on(Node.named("google").with(Id.is(12345)))
.match(Connection.named("rel1").andType("KNOWS").between("john").and("middle"))
.match(Connection.named("rel2").andType("KNOWS").between("middle").and("googleEmployee"))
.match(Connection.withType("WORKS_AT").from("googleEmployee").to("google"))
.where(Are.allOfTheseTrue(Column.named("rel1.STRENGTH").isGreaterThanOrEqualTo(3)
.and(Column.named("googleEmployee.TITLE").isEqualTo("Software Engineer"))))
.returns(Columns.named("rel1", "middle", "rel2", "googleEmployee"))
.orderBy(Asc.column("middle.NAME"), Desc.column("rel1.STRENGTH"))
Run Code Online (Sandbox Code Playgroud)
这会产生以下查询:
START john=node:PERSON_NAMES(name='John'),google=node(12345) MATCH john-[rel1:KNOWS]-middle,middle-[rel2:KNOWS]-googleEmployee,googleEmployee-[:WORKS_AT]->google WHERE ((rel1.STRENGTH >= '3' AND googleEmployee.TITLE = 'Software Engineer')) RETURN rel1,middle,rel2,googleEmployee ORDER BY middle.NAME ASC,rel1.STRENGTH DESC
Run Code Online (Sandbox Code Playgroud) 有没有办法在Laravel 4中生成SQL查询(使用查询生成器),它支持"from"子句中的多个表,而不使用连接?
我想做这样的事情:
SELECT * FROM table_1 as t1, table_1 as t2...
Run Code Online (Sandbox Code Playgroud)
这可以在不使用连接的情况下完成吗?我注意到from()方法在表名/别名之后删除了任何东西:
->from('table_1 as t1, table_1 as t2')
Run Code Online (Sandbox Code Playgroud)
成为(是的,最后用逗号):
table_1 as t1,
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.