6

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

我试过以下没有运气。

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

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

4 回答 4

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);
    }

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

于 2013-08-17T00:41:44.577 回答
0

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

...
var setters = GetType().GetProperties()
    .Where(p => p.GetValue(this, null) == null 
             && p.PropertyType.IsGenericType 
             && p.PropertyType.GetGenericTypeDefinition() == tableType)
    .Select...
于 2015-02-08T08:45:29.453 回答
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 模式,则必须使用构造函数来定义它

    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;
     }
于 2016-12-28T11:45:28.120 回答
0

根据@Acorax 的回答,这对我来说还不够,我需要在模式和表名中添加括号来解决这个问题。

所以这解决了我的架构问题:

public class MyDatabase : Database<MyDatabase>
{
    public Table<Item> Items;

    public HamenasDbSchema()
    {
        Items = new Table<User>(this, "[Schema].[Items]");
    }
}
于 2022-01-29T21:54:51.890 回答