代码之家  ›  专栏  ›  技术社区  ›  Ted

serviceStack.ormLite:当类名出现在不同的命名空间中时,表发生冲突

  •  1
  • Ted  · 技术社区  · 6 年前

    当两个类具有相同的名称但在不同的命名空间中时,ServiceStacks或Lite无法区分这两个类。例如:

    Type type = typeof(FirstNameSpace.BaseModel);
    using (IDbConnection db = _dbFactory.Open())
    {
         db.CreateTable(false, type); // Creates table "basemodel"
    }
                            
    type = typeof(SecondNamespace.BaseModel);
    using (IDbConnection db = _dbFactory.Open())
    {
         db.CreateTable(false, type); // Creates nothing as there already is a table 'basemodel', even though its a completely different object/class
    }
                            

    有没有一个一般的,干净的方法来确保这一点得到解决?

    强制唯一地命名类是不理想的;.NET中命名空间的一部分是对不同的类进行分组和分类。此外,可能还有具有相同类名的第三方程序集,您无法更改这些程序集。

    有办法解决这个问题吗?

    1 回复  |  直到 6 年前
        1
  •  3
  •   mythz    6 年前

    ORMLite使用类型的名称作为表名,因此不能使用两个具有相同名称的不同类型。

    您需要重命名其中一个类型以避免冲突,或者使用[别名(useTableName)]属性告诉其中一个类型使用不同的RDBMS表名。