Dapper Rainbow - 如何在另一个模式中指定表名

时间:2012-09-14 11:57:32

标签: dapper dapper-rainbow

我是Dapper Rainbow的新手,所以我可能会遗漏一些明显的东西。是否可以指定表名,如果可以,如何指定?

我试过以下但没有运气。

public class DashboardContext : Database<DashboardContext>
{
    public DashboardContext()
    {
       this.DashboardResults = new Table<DashboardResult>(this, "Monitor.DashboardResult");
    }

    public Table<DashboardResult> DashboardResults { get; set; }
}

3 个答案:

答案 0 :(得分:1)

我遇到了同样的问题但是代码中似乎有错误。我刚刚评论了为表格(Database.cs)设置构造函数的行,并且它可以工作。

    internal void InitDatabase(DbConnection connection, int commandTimeout)
    {
        this.connection = connection;
        //this.commandTimeout = commandTimeout;
        //if (tableConstructor == null)
        //{
        //    tableConstructor = CreateTableConstructorForTable();
        //}

        //tableConstructor(this as TDatabase);
    }

我想这不是最好的解决方案......

答案 1 :(得分:0)

你需要破解彩虹源才能让它发挥作用。 在DataBase.cs文件中找到CreateTableConstructor方法。 只需添加一些代码如下:

...
var setters = GetType().GetProperties()
    .Where(p => p.GetValue(this, null) == null 
             && p.PropertyType.IsGenericType 
             && p.PropertyType.GetGenericTypeDefinition() == tableType)
    .Select...

答案 2 :(得分:0)

对于像我这样在这篇帖子上踩到这个帖子的其他人现在已经修复了Dapper.Rainbow版本0.1.3。

此时它仍处于测试阶段(0.1.3-beta1),因此如果您想使用模式,您可以克隆/分叉存储库并运行构建脚本。然后可以直接使用二进制输出或打包。

对于表设置,您需要使用该特定表的模式名称定义表名,例如,查看此示例而不使用模式

    public class MyDatabase : Database<MyDatabase>
    {
        public Table<Order> Order{ get; set; }
        public Table<Customer> Customer { get; set; }
        public Table<Item> Item { get; set; }
    }

如果您只使用dbo,哪个有效。但是如果您使用例如Item的Product schema,则必须使用构造函数

来定义它
    public class MyDatabase : Database<MyDatabase>
    {
        public Table<Order> Order{ get; set; }
        public Table<Customer> Customer{ get; set; }
        public Table<Item> Item;

        public MyDatabase()
        {
            Item = new Table<Item>(this, "Product.Item");
        }
    }

其余的应该像以前一样

     using (var connection = DbConnections.Create())
     {
            connection.Open();
            var db = MyDatabase.Init((DbConnection)connection, commandTimeout: 2);
            var insert = db.Customer.Insert(
            // .
            //..... your object
            // .
            );
            var insertId = insert.Value;
     }