标签: fluent

流利的NHibernate多对多

我正在使用Fluent NHibernate并且遇到一些问题,我可以通过其中一个类来设置多对多的关系.这可能是一个愚蠢的错误,但我已经陷入了一点点试图让它运作.无论如何,我有几个有很多关系的课程.

public class Person
{
    public Person()
    {
        GroupsOwned = new List<Groups>();
    }

    public virtual IList<Groups> GroupsOwned { get; set; }
}

public class Groups
{
    public Groups()
    {
        Admins= new List<Person>();
    }

    public virtual IList<Person> Admins{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)

映射看起来像这样

人:......

HasManyToMany<Groups>(x => x.GroupsOwned)
    .WithTableName("GroupAdministrators")
    .WithParentKeyColumn("PersonID")
    .WithChildKeyColumn("GroupID")
    .Cascade.SaveUpdate();
Run Code Online (Sandbox Code Playgroud)

团体:......

 HasManyToMany<Person>(x => x.Admins)
    .WithTableName("GroupAdministrators")
    .WithParentKeyColumn("GroupID")
    .WithChildKeyColumn("PersonID")
    .Cascade.SaveUpdate();
Run Code Online (Sandbox Code Playgroud)

当我运行集成测试时,基本上我正在创建一个新的人和组.将组添加到Person.GroupsOwned.如果我从存储库中获取Person对象,则GroupsOwned等于初始组,但是,当我检查Group.Admins上的计数时,如果我返回组,则计数为0. Join表具有GroupID和PersonID保存在其中.

感谢您的任何建议.

c# nhibernate fluent fluent-nhibernate

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

Laravel Fluent查询 - 如何使用Fluent执行'SELECT AS'?

我对Laravel和Fluent的查询很新.我有一个查询来从hire表中选择所有行并以随机顺序显示它们.

DB::table('hire_bikes')->order_by(\DB::raw('RAND()'))->get();
Run Code Online (Sandbox Code Playgroud)

我现在想做的就是放

concat(SUBSTRING_INDEX(description, " ",25),"...") AS description
Run Code Online (Sandbox Code Playgroud)

进入查询的SELECT部分​​,这样我就可以从表中选择*和缩短的描述.

我知道这可以通过运行原始查询来实现,但我希望能够使用Fluent或至少部分Fluent(如上所述)来完成此操作.

任何帮助或想法?

谢谢亚当.

mysql fluent laravel

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

如何在流畅的nhibernate中加入表

我们怎么做这个映射但流利?

<class name="Person" table="People">

    <id name="Id">
        <generator class="identity"/>
    </id>

    <property name="Name" />

    <join table="Addresses">
        <key column="PersonId"/>
        <property name="Line1"/>
        <property name="Line2"/>
        <property name="City"/>
        <property name="Country"/>
        <property name="ZipCode"/>
    </join>

</class>
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用'参考',但我不需要相关表格中的所有列.我只需要一个房产.

nhibernate fluent

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

在数据库中存储枚举值的最佳方法 - String或Int

我的应用程序中有许多枚举,在某些类中用作属性类型.

将这些值存储在数据库中的最佳方法是什么,如String或Int?

仅供参考,我还将使用流畅的Nhibernate映射这些属性类型.

示例代码:

public enum ReportOutputFormat
{
    DOCX,
    PDF,
    HTML
}

public enum ReportOutputMethod
{
    Save,
    Email,
    SaveAndEmail
}

public class ReportRequest
{
    public Int32 TemplateId
    {
        get { return templateId; }
        set { templateId = value; }
    }
    public ReportOutputFormat OutputFormat
    {
        get { return outputFormat; }
        set { outputFormat = value; }
    }

    public ReportOutputMethod OutputMethod
    {
        get { return outputMethod; }
        set { outputMethod = value; }
    }
}
Run Code Online (Sandbox Code Playgroud)

database nhibernate enums fluent

19
推荐指数
2
解决办法
7363
查看次数

使用eloquent截断laravel中的所有表

有没有办法我可以使用雄辩或流利的laravel 4来截断数据库中的所有表格?我不想指定表名,我只想截断所有表.换句话说,清空所有表.

php database fluent laravel eloquent

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

您在C#中制作或看到的哪些流畅的界面非常有价值?他们真是太棒了?

如今,"流畅的界面"是一个相当热门的话题.C#3.0有一些很好的功能(特别是扩展方法)可以帮助你制作它们.

FYI,一个流畅的API意味着每个方法调用返回一些有用的东西,通常是你调用方法的同一个对象,所以你可以继续链接.Martin Fowler的与Java实例讨论它在这里.这个概念就像这样:

var myListOfPeople = new List<Person>();

var person = new Person();
person.SetFirstName("Douglas").SetLastName("Adams").SetAge(42).AddToList(myListOfPeople);
Run Code Online (Sandbox Code Playgroud)

我在C#中看到了一些非常有用的流畅接口(一个例子是用于验证早先我问过的StackOverflow问题中找到的参数的流畅方法.它让我感到震惊.它能够为表达参数验证规则提供高度可读的语法,并且另外,如果没有例外,它可以避免实例化任何对象!所以对于"正常情况",开销非常小.这一小窍门在短时间内教会了我很多.我想找到更多的东西像那样).

所以,我想通过观察和讨论一些优秀的例子来了解更多.那么,你在C#中制作或看到的一些优秀的流畅界面,是什么让它们如此有价值?

谢谢.

c# extension-methods fluent c#-3.0

18
推荐指数
3
解决办法
3314
查看次数

流畅的NHibernate Cascade - 哪一边?

在使用Fluent NHibernate时,我似乎无法找到关于何时使用References端和HasMany端的级联选项的良好解释.

映射以下内容有何不同(如果有的话)......

References(...).Cascade.All();
Run Code Online (Sandbox Code Playgroud)

VS

HasMany(...).Cascade.All();
Run Code Online (Sandbox Code Playgroud)

我的问题源于保存父(root)实体时的问题.一旦它被保存,我想确保所有子对象也被保留.

.net c# nhibernate fluent

18
推荐指数
1
解决办法
7444
查看次数

这个Monster Builder是一个很好的构建器/工厂模式,用于抽象混合了setter的长构造函数吗?

这是一个关于将步骤构建器模式增强向导构建器模式组合到创建 DSL中的人机界面问题.它使用流畅的界面,虽然它使用方法链接,而不是级联.也就是说,这些方法返回不同的类型.

我面对的是一个怪物类,它有两个构造函数,它们混合了整数,字符串和一系列字符串.每个构造函数都是10个参数.它还有大约40个可选的制定者; 如果一起使用,其中一些相互冲突.它的构造代码看起来像这样:

Person person = Person("Homer","Jay", "Simpson","Homie", null, "black", "brown", 
  new Date(1), 3, "Homer Thompson", "Pie Man", "Max Power", "El Homo", 
  "Thad Supersperm", "Bald Mommy", "Rock Strongo", "Lance Uppercut", "Mr. Plow");

person.setClothing("Pants!!");     
person.setFavoriteBeer("Duff");
person.setJobTitle("Safety Inspector");
Run Code Online (Sandbox Code Playgroud)

这最终失败了,因为事实证明设置了两个最喜欢的啤酒职位是不相容的.叹.

重新设计怪物类不是一种选择.它被广泛使用.有用.我只是不想再看它直接构建了.我想写一些干净的东西来喂它.在不让开发人员记住它们的情况下遵循其规则的东西.

与我一直在研究的美妙的建造者模式相反,这个东西没有风味或类别.它在需要时始终需要一些字段和其他字段,有些仅取决于之前设置的字段.施工人员不是伸缩式的.它们提供了两种使类进入相同状态的替代方法.它们漫长而丑陋.他们想要给他们的东西各不相同.

一个流畅的建设者肯定会让长建筑师更容易看到.然而,大量可选的设置器使所需的设置器变得混乱.并且要求级联的流利构建器不满足:编译时执行.

构造函数强制开发人员显式添加必需的字段,即使将其归零也是如此.使用级联流畅的构建器时,这会丢失.与安装者失去的方式相同.我想要一种方法来阻止开发人员构建,直到添加了每个必填字段.

与许多建筑师模式不同,我所追求的不是不变性.我发现它,我正在离开课堂.我想通过查看构建它的代码来了解构造的对象是否处于良好状态.无需参考文档.这意味着它需要通过有条件的必要步骤来接受程序员.

Person makeHomer(PersonBuilder personBuilder){ //Injection avoids hardcoding implementation
    return personBuilder

         // -- These have good default values, may be skipped, and don't conflict -- //
        .doOptional() …
Run Code Online (Sandbox Code Playgroud)

java dsl design-patterns fluent builder

18
推荐指数
1
解决办法
2196
查看次数

是否有任何库将SQL查询表示为Java代码中的对象?

我想知道是否有任何库可用于将SQL查询表示为Java中的对象.

在代码中,我有很多类型为java.lang.String的静态变量,它们是手写的SQL查询.我会寻找具有漂亮的流畅 API的库,它允许我将查询表示为对象而不是字符串.

例:

Query q = select("DATE", "QUOTE")
  .from("STOCKMARKET")
  .where(eq("CORP", "?"))
  .orderBy("DATE", DESC);
Run Code Online (Sandbox Code Playgroud)

java sql api fluent

15
推荐指数
4
解决办法
5167
查看次数

"流利"(或可链接)方法必须是不可变的吗?

假设我有一个具有一些属性的类和一些用于操作这些属性的方法:

public class PersonModel
{
    public string Name { get; set; }
    public string PrimaryPhoneNumber { get; set; }

    public void LoadAccountInfo(AccountInfo accountInfo)
    {
        this.Name = accountInfo.Name;
    }

    public void LoadPhoneInfo(PhoneInfo phoneInfo)
    {
        this.PrimaryPhoneNumber = phoneInfo.PhoneNumber;
    }
}
Run Code Online (Sandbox Code Playgroud)

典型用法是:

var model = new PersonModel();
model.LoadAccountInfo(accountInfo);
model.LoadPhoneInfo(phoneInfo);
Run Code Online (Sandbox Code Playgroud)

我认为将方法链接起来会很酷:

    public PersonModel LoadAccountInfo(AccountInfo accountInfo)
    {
        this.Name = accountInfo.Name;
        return this;
    }

    public PersonModel LoadPhoneInfo(PhoneInfo phoneInfo)
    {
        this.PrimaryPhoneNumber = phoneInfo.PhoneNumber;
        return this;
    }
Run Code Online (Sandbox Code Playgroud)

那么用法是:

var model = new PersonModel()
    .LoadAccountInfo(accountInfo)
    .LoadPhoneInfo(phoneInfo);
Run Code Online (Sandbox Code Playgroud)

但是我没有在每个可链接的方法中返回传入的PersonModel对象的修改"克隆".他们只是修改原始对象并返回它(为方便起见).对我来说,这会产生歧义,因为有人调用这些方法可能会认为它们是不可变的(即它们保持原始对象完整但返回修改后的对象).

这是否违反了关于流畅/可链接接口的任何最佳实践?

c# fluent-interface fluent

15
推荐指数
1
解决办法
1020
查看次数