我有一个数据库表中的字符串列映射到代码中的枚举。在我的dbml文件中,当我将“类型”设置为MyTypes.EnumType时,出现以下错误:从字符串映射枚举
错误1 DBML1005:DbType'VarChar(50)NOT NULL'与类'MyTypes.EnumType'类型'Table1'的EnumCol'不受支持。
此问题: LINQ to SQL strings to enums 表明我正在尝试做的事情是可能的,但它是如何完成的?
我有一个数据库表中的字符串列映射到代码中的枚举。在我的dbml文件中,当我将“类型”设置为MyTypes.EnumType时,出现以下错误:从字符串映射枚举
错误1 DBML1005:DbType'VarChar(50)NOT NULL'与类'MyTypes.EnumType'类型'Table1'的EnumCol'不受支持。
此问题: LINQ to SQL strings to enums 表明我正在尝试做的事情是可能的,但它是如何完成的?
好奇 - 它应该工作IIRC;我会看看我能否做一个快速示例 - 但是,您可能想要检查是否具有完全限定的枚举名称(即包含名称空间)。
[更新]从看来RTM版本在解析枚举时带有错误。建议的一种解决方法(在该页面上)是添加global::
前缀。如果没有这个解决方法,它对我来说工作得很好,所以它可能在3.5 SP1中得到修复?如果您使用非限定名称(如果枚举位于同一名称空间中),则它也可以在3.5中正常运行。
[示例]烨,工作得很好:与罗斯文,我定义枚举为航运国家:
namespace Foo.Bar
{
public enum MyEnum
{
France,
Belgium,
Brazil,
Switzerland
}
}
然后我编辑dbml的有:
<Column Name="ShipCountry" Type="Foo.Bar.MyEnum" DbType="NVarChar(15)" CanBeNull="true" />
这产生:
private Foo.Bar.MyEnum _ShipCountry;
//...
[Column(Storage="_ShipCountry", DbType="NVarChar(15)", CanBeNull=true)]
public Foo.Bar.MyEnum ShipCountry
{ get {...} set {...} }
最后写了一个查询:
using (DataClasses1DataContext ctx = new DataClasses1DataContext())
{
var qry = from order in ctx.Orders
where order.ShipCountry == Foo.Bar.MyEnum.Brazil
|| order.ShipCountry == Foo.Bar.MyEnum.Belgium
select order;
foreach (var order in qry.Take(10))
{
Console.WriteLine("{0}, {1}", order.OrderID, order.ShipCountry);
}
}
工作正常;结果:
10250, Brazil
10252, Belgium
10253, Brazil
10256, Brazil
10261, Brazil
10287, Brazil
10290, Brazil
10291, Brazil
10292, Brazil
10299, Brazil
我知道这已被回答,但我仍然得到这个错误也。很奇怪。
无论如何,我找到了解决方案。您需要PREPEND枚举的完整名称空间与global::
像WTF?究竟。我知道这听起来很奇怪。下面是一个例子的screenie =>
alt text http://img11.imageshack.us/img11/7517/lolzqg.png
所以跛脚:(
不管怎么说,我没有想出解决办法。所谓Matt一些纨绔子弟,没有。他贴在MS Connect和bug报告他们不能瑞普它,所以它不是固定的,我猜。
不管怎么说,HTH。
如果您在designer.cs添加全局:: qualyfier然后按Ctrl +空格在文件类型它承认类型和你可以删除它。
它工作时,我得到3.5 SP1 – Barry 2008-10-17 13:53:47
我不得不预先在3.5 SP1的“全球::”。也许是因为我改变了DataContext(Project.Dal)和实体(Project.Dal.Entities)的默认名称空间? – jrummell 2010-01-29 20:44:39