小编Chr*_*s W的帖子

使用dapper.net返回mysql LAST_INSERT_ID()时无效的强制转换

MSSQL在这里已经涵盖了这个问题:

如何使用Dapper执行插入并返回插入的标识?

但是这个解决方案不适用于mysql.

LAST_INSERT_ID()使用mysql转换为整数,您必须这样做:

SELECT CAST(LAST_INSERT_ID() AS UNSIGNED INTEGER);

堆栈跟踪是:

Dapper.<QueryInternal>d__13`1.MoveNext() in sqlMapper.cs:607
   System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) +159
   System.Linq.Enumerable.ToList(IEnumerable`1 source) +36
   Dapper.SqlMapper.Query(IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Boolean buffered, Nullable`1 commandTimeout, Nullable`1 commandType) in sqlMapper.cs:535
Run Code Online (Sandbox Code Playgroud)

有没有人在MySQL中解决这个问题?

编辑:

我已成功完成以下工作:

var id = connection.Query<ulong>("SELECT CAST(LAST_INSERT_ID() AS UNSIGNED INTEGER);").Single();
Run Code Online (Sandbox Code Playgroud)

也许不理想,但它的确有效.

c# mysql dapper

13
推荐指数
2
解决办法
5845
查看次数

使用两个功能进行单元测试

我已经忽略了一段时间的单元测试.我写了单元测试,但他们相当差.我现在正在阅读"单元测试的艺术",以使自己达到最佳状态.

如果我有一个界面,如:

public interface INotificationService
{
    void AddError(string _error);
    void AddIssue(string _issue);

    IEnumerable<string> FetchErrors();
    IEnumerable<string> FetchIssues();
}
Run Code Online (Sandbox Code Playgroud)

此接口的具体实现包含:

    private readonly ICollection<Message> messages;
Run Code Online (Sandbox Code Playgroud)

添加错误或问题会创建一个带有枚举的新消息,表示其类型并将其添加到集合中.调用FetchErrors()/ FetchIssues()从集合中返回该类型的消息.

以下测试是否有效?:

    [Test]
    public void FetchErrors_LoggingEnabledAddErrorFetchErrors_ReturnsError()
    {
        notificationService = new NotificationService();
        notificationService.AddError("A new error");

        Assert.AreEqual(new []{"A new error"}, notificationService.FetchErrors());
    }
Run Code Online (Sandbox Code Playgroud)

我担心的是我首先调用AddError(),然后测试FetchErrors()的结果.所以我称之为两个功能.这是不正确的?

我应该将集合公开并直接断言它包含包含已记录错误消息的相应类型的消息吗?

在这种情况下,最佳做法是什么?

c# nunit unit-testing

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

是否值得抽象出单个类的对象创建?

我正在玩设计模式,事情进展顺利.我不确定的一件事是,当目前只有一个对象时,是否值得抽象出对象创建?

例如,我正在处理的项目包含两种不同的用户类型,它们之间没有任何关联.他们是IStudent和IStaff.对于有问题的应用程序,将永远不会有任何其他类型的用户(工作人员角色处理所有非学生与系统的交互).

在我的控制器中我可以简单地:

IStudent student = new Student();
Run Code Online (Sandbox Code Playgroud)

或者我是这样的:

public static class UserFactory
{
    public static T Create<T>() where T : class
    {
        if(typeof(T) == typeof(IStudent))
            return new Student() as T;

        if (typeof(T) == typeof(IStaff))
            return new Staff() as T;

         throw new Exception("The requested user type is not valid.");
    }
}
Run Code Online (Sandbox Code Playgroud)

然后:

IStudent student = UserFactory.Create<IStudent>();
Run Code Online (Sandbox Code Playgroud)

这有点矫枉过正吗?我正试图在这些情况下找出最佳实践.

c# design-patterns factory

6
推荐指数
1
解决办法
144
查看次数

使用自定义查询在ID列表中选择其ID存在的项目

在短小精悍的你可以做一些事情:

var items = connection.Query<Items>("SELECT * FROM `@database`.`table`  WHERE `id` IN @idList;", new {database = DatabaseName, idList = someList.Select(n => n.id)});
Run Code Online (Sandbox Code Playgroud)

尝试在ormlite中做同样的事情:

var items = connection.Query<Items>("SELECT * FROM {0}`.`table`  WHERE `id` IN {1};", DatabaseName, someList.Select(n => n.id)});
Run Code Online (Sandbox Code Playgroud)

返回错误.Dapper创建查询:

SELECT * FROM `someDB`.`table` WHERE `id` IN (1,2,3,4);
Run Code Online (Sandbox Code Playgroud)

ormlite生成的地方:

SELECT * FROM `someDB`.`table` WHERE `id` IN [1,2,3,4];
Run Code Online (Sandbox Code Playgroud)

方括号在MySQL中无效.是不是可以在ormlite中做到这一点?

当我尝试使用匿名类列出参数时,如在dapper示例中,它找不到第二个参数.

c# mysql dapper ormlite-servicestack

6
推荐指数
1
解决办法
3362
查看次数

Lucene.Net使用Ninject InSingletonScope()

阅读Lucene,似乎建议在所有请求中使用相同的IndexSearcher实例.

如果我有一个使用ninject注入的搜索类

public interface IPatientSearch
{
    void DoSearch(ref SearchDTO _search);

    //...
}
Run Code Online (Sandbox Code Playgroud)

是否存在使用InSingletonScope绑定它的任何问题,这将确保在所有请求中共享相同的实例?

        Bind<IPatientSearch>().To<PatientSearch>().InSingletonScope();
Run Code Online (Sandbox Code Playgroud)

我是否遗漏了使用这种方法的任何明显缺陷?

c# singleton lucene.net ninject

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

这是实现ITaggable功能的适当方式吗?

我正在寻找为我所参与的项目添加可标记功能.该项目是3层(mvc3 - 域 - 存储库).

我需要添加标记此系统中各种对象的功能.因为标签可以附加到许多不同的聚合根,我最好将标签作为自己的根(域中的rep/ITagManager).

我的想法是让ITaggable界面类似于:

public interface ITaggable
{
    bool SaveTags(IList<ITag> _tags);
    bool SaveTag(ITag _tag);
    IList<ITag> GetTags();
    bool HasTag(IList<ITag> _tags);
    bool HasTag(ITag _tag);
    bool HasTag(string _tagName);
}
Run Code Online (Sandbox Code Playgroud)

我有一个想法,有一个ITagManager,它有方法来获取ITaggable对象并保存/加载附加到它们的标签(可能使用类似String.Concat(typeof(this),this.ID)来生成对象的唯一ID.实现ITaggable接口).现在有两种可能的路由,首先将任何实现ITaggable接口的对象传递到ITagManager本身,或者将Itaggable接口修改为如下所示:

public interface ITaggable
{
    bool SaveTags(IList<ITag> _tags, ITagManager _tagManager);
    bool SaveTag(ITag _tag, ITagManager _tagManager);
    IList<ITag> GetTags(ITagManager _tagManager);
    bool HasTag(IList<ITag> _tags, ITagManager _tagManager);
    bool HasTag(ITag _tag, ITagManager _tagManager);
    bool HasTag(string _tagName, ITagManager _tagManager);
}
Run Code Online (Sandbox Code Playgroud)

第一个解决方案可能是贫血模型的气味,但第二个解决方案看起来很混乱.我知道可以注入依赖关系,但我认为将它作为一个函数参数可以明确地说明发生了什么.或者将它注入对象会更好吗?

这些解决方案是否合适?

任何帮助/建议将不胜感激.

c# tagging domain-driven-design asp.net-mvc-3

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

具有弹跳定位问题的JQuery幻灯片效果

我正在尝试创建一种效果,在鼠标悬停时,从父div的底部滑出div,并在幻灯片完成后弹回.

$("#testDiv").hover(function() {
    $(".box").stop().slideDown("slow", function() {
        $(".box").effect("bounce", {
            times: 3, distance: 3
        }, 250);
     });

    }, function() {
        $(".box").stop().slideUp();
});
Run Code Online (Sandbox Code Playgroud)

到目前为止我的代码的一小部分在这里:

http://jsfiddle.net/7TZ3E/

它有时似乎有效,然后它以多种不同的方式混乱.要么它停止显示,跳转到父div的顶部,要么慢慢减小.

我很感激任何帮助,以产生我正在寻找的效果!

jquery jquery-ui

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