【问题标题】:Weird mapping error in linq-to-sql dbml file in VS2010VS2010 中 linq-to-sql dbml 文件中的奇怪映射错误
【发布时间】:2013-08-22 03:50:41
【问题描述】:

自从我切换到 VS2010 后,我每天都会在我的 dbml 文件中遇到几次编译错误:

DBML1005: Mapping between DbType 'bigint' and Type
'MyNamespace.SecurityToken' in Column 'SecurityToken' of Type
'Employee' is not supported

当我重新启动 VS2010 时,错误消失了。使用这个 dbml 文件运行我的应用程序没有问题(具体来说,在 Employee 对象的 SecurityToken 属性中获取正确值没有问题)。

SecurityToken 属性是枚举类型,定义如下:

[Flags]
public enum SecurityToken : long
{
    None = 1,
    Admin = 2,
    ......
}

数据库中的SecurityToken 列的类型为bigint

我错过了什么吗?特别奇怪的是,当我编写与 LINQ 模型完全无关的代码时,该错误有时才会发生。

【问题讨论】:

    标签: c# visual-studio-2010 linq-to-sql


    【解决方案1】:

    在解析枚举时,这似乎是一个 LINQ 错误。解决方法是添加global:: 前缀。

    您的 DBML 文件中对此的必要映射可能如下所示:

    <Column Name="SecurityToken" Type="global::MyNamespace.SecurityToken" 
            DbType="BigInt NOT NULL" CanBeNull="false" />
    

    当然,您也可以使用设计器来做同样的事情。

    【讨论】:

    • 或者,在与 DataContext 相同的命名空间中声明枚举。 IIRC,这个“错误”也出现在 VS2008 中。
    • @leppie:有趣的是,有时映射在不使用 global 关键字的情况下也能正常工作,但有时......
    • 我会试一试,如果问题不再出现,我会报告。谢谢。
    • 同样的事情发生在 11 年后的 VS 2019
    猜你喜欢
    • 2011-02-10
    • 1970-01-01
    • 2010-11-09
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多