首页 新闻 会员 周边 捐助

CYQ.Data中DBFast操作实体类怎么修改链接数据库

0
[已解决问题] 解决于 2016-10-17 13:40

DBFast是用了操作实体类用的吧,这个类不能修改连接的数据库,只能使用默认的AppConfig的conn配置

其实情况是这样,看了http://www.cnblogs.com/cyq1162/p/3213531.html一文中用的是实体型(充血型的ORM操作 )然后我项目中用的都是纯实体型,所以想通过纯实体型操作,结果发现了问题是这样的

using (var action = new MAction("MapRoute", "txt path={0},ts=0"))
{
action.Select("").ToList<MapRoute>();
}

错误提示

V5.6.6.3 Txt.,ts=0:check the tablename  "MapRoute" is exist?

uxinxin的主页 uxinxin | 菜鸟二级 | 园豆:203
提问于:2016-10-14 13:49
< >
分享
最佳答案
0

如:MapRoute实体的完整名称为:XXX.Abc.MapRoute

那么数据库链接的检查顺序是:AbcConn ,如果找不到,就会找默认的Conn

也就是由类名的上一级名称空间先决定链接。

 

补充说明:

可以看DBFast的源码实现:

 public static int GetCount<T>(object where)
        {
            using (MAction action = GetMAction<T>())
            {
                return action.GetCount(where);
            }
        }
        private static MAction GetMAction<T>()
        {
            string conn = string.Empty;
            MAction action = new MAction(GetTableName<T>(out conn), conn);
            //action.SetAopOff();
            return action;
        }
        private static string GetTableName<T>(out string conn)
        {
            conn = string.Empty;
            Type t = typeof(T);

            string[] items = t.FullName.Split('.');
            if (items.Length > 1)
            {
                conn = items[items.Length - 2] + "Conn";
                items = null;
            }
            string tName = t.Name;
            t = null;
            if (tName.EndsWith(AppConfig.EntitySuffix))
            {
                tName = tName.Substring(0, tName.Length - AppConfig.EntitySuffix.Length);
            }
            tName = CYQ.Data.Tool.DBTool.GetMapTableName(conn, tName);
            return tName;
        }

 

奖励园豆:5
路过秋天 | 老鸟四级 |园豆:4787 | 2016-10-14 14:37

这我看了啊,问题是木有想象中的,可以在外部修正自己想连接的数据库,因为我是想用这个来访问一个配置文件的,也许其他位置写另外一个会访问其他配置文件,如果都靠名称空间来区别并访问web.config获取感觉不太合理吧

uxinxin | 园豆:203 (菜鸟二级) | 2016-10-14 14:41

@uxinxin: 

你的需求没怎么看的确定,有点模糊。

如果需要方案,可以把需求说的清楚明白些。

也可以使用MAction。

路过秋天 | 园豆:4787 (老鸟四级) | 2016-10-14 15:59

@路过秋天: 

是这样,我看了金牛座框架之后,感觉这个路由一块写的有点儿死,想改造一下,我想把路由配置写到一个txt或者xml文件里面,反正现在不会操作就是了

格式是这样的

1 {"ID":"System.Int32","Urltemplate":"System.String","Default":"System.String"},
2 {"ID":1,"Urltemplate":"{controller}/{action}/{id}","Default":{"controller":"home","action":"index","id":"0"}},
3 {"ID":2,"Urltemplate":"{controller}","Default":{"controller":"home","action":"index"}}

上面这个我是通过下面代码创建的

public class MapRoute: CYQ.Data.Orm.OrmBase
{
    public MapRoute()
    {
        base.SetInit(this, "MapRoute", "txt path={0};ts=0");
    }
    public int ID { get; set; }
    public string Urltemplate { get; set; }
    public object Default { get; set; }
}
        using (MapRoute mapRoute = new MapRoute())
        {
            mapRoute.Urltemplate = "{controller}/{action}/{id}";
            mapRoute.Default = JsonHelper.ToJson(new Dictionary<string, string> { { "controller", "home" }, { "action", "index" }, { "id", "0" } });
            mapRoute.Insert(InsertOp.None);
        }

但实际上,我想用下面这样的实体类型创建,该如何操作

public class MapRoute
{
    public int ID { get; set; }
    public string Urltemplate { get; set; }
    public object Default { get; set; }
}

,并且,接下来我需要可以重新获取回来到一个List<MapRoute>里面

然后有了

        using (var action = new MAction("MapRoute", "txt path={0},ts=0"))
        {
            action.Select("").ToList<MapRoute>();
        }

这个写法

但是直接提示了V5.6.6.3 Txt.,ts=0:check the tablename  "MapRoute" is exist?这样的错误

uxinxin | 园豆:203 (菜鸟二级) | 2016-10-17 09:39

@uxinxin:ts=1

路过秋天 | 园豆:4787 (老鸟四级) | 2016-10-17 10:26

@路过秋天: 

ts=1之后报的错误

V5.6.6.6 Txt.,ts=1:check the tablename  "MapRoute" is exist?

uxinxin | 园豆:203 (菜鸟二级) | 2016-10-17 10:33

@uxinxin: 在ORMBase那里指定ts=1,生成了*.ts数据结构之后,才能用MAction操作。

路过秋天 | 园豆:4787 (老鸟四级) | 2016-10-17 13:30

@路过秋天: 是啊,我现在报的错误就是改成1之后运行才产生的……

uxinxin | 园豆:203 (菜鸟二级) | 2016-10-17 13:38

@路过秋天: 找到问题了,因为我ts=1前面应该用;的写成了逗号……,谢谢了

uxinxin | 园豆:203 (菜鸟二级) | 2016-10-17 13:40
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册