有没有办法在Linq to SQL返回的实体中使用自定义数据类型?
假设我有这样的数据类型:
public struct CustomerNumber : IEquatable<string>
{
private string _value;
public static implicit operator CustomerNumber(string value)
{
return new CustomerNumber { _value = value };
}
...
}
它还定义了==!=等的运算符。
当我尝试替换返回实体中的一个属性时,即使您可以从字符串中分配CustomerNumber,我也会得到异常Invalid cast from 'System.String' to 'CustomerNumber'
。
这是不可能还是我做错了什么?
编辑 - 澄清:
CustomerNumber
用作Linq to SQL生成的实体上的数据类型。尝试查询数据库时发生异常。这不是我想要施展的东西,它在LinqToSQL魔法中的某个地方出错了。
我的代码看起来像这样:
var customers = DataContext.Customers;
编辑:
事实证明,如果你的struct实现了一个显式运算符,它可以工作,或者更确切地说,它正在使用一个结构来实现一个显式运算符,从字符串转换为类型,但不是如果它要从System.Int32转换到类型。
再次编辑:它仍然无效。
答案 0 :(得分:1)
我认为你能够做到这一点的唯一方法是将它作为L2S生成的分部类中的属性编写。如果您将Column
属性设为私有,则可以将其保留为字符串,然后将其用作自定义属性的后备存储,以显示您的自定义类型。
答案 1 :(得分:0)
正确的方法(来自MSDN)是:
如果类实现了Parse()和ToString(),则可以将对象映射到任何SQL文本类型(CHAR,NCHAR,VARCHAR,NVARCHAR,TEXT,NTEXT,XML)。通过将ToString()返回的值发送到映射的数据库列,该对象存储在数据库中。通过在数据库返回的字符串上调用Parse()来重构对象。