将具有单个原始属性的类序列化为EF中的“原始”列

时间:2012-02-20 19:36:40

标签: c# serialization entity-framework-4 ado.net properties

我创建了一个自定义C#(4.0)类,用于EF(4.1)模型类的属性。此自定义类的唯一属性是Guid作为其类型。现在,我有兴趣知道是否可以将我的自定义类序列化为模型表上的Guid列,就好像它是一种原始类型(由SQL Server 2008 R2支持)。

具体来说,我不希望使用普通Guid作为属性,因为模型属性在概念上具有来自Guid的远距离意义和功能。我不会将Guid用作主键。相反,我将使用它作为外键来访问具有非主Guid列/属性的另一个表/集合(以及具有相同Guid的多个行/实例)。这可能听起来很牵强,但对于这个特定目的而言,这将是非常方便的设计。

1 个答案:

答案 0 :(得分:1)

我认为以下方法可能适用于EF:

  1. 继续将GUID列添加到您的模型和数据库中,但是在您的EF映射中,将其get和set访问器设置为私有或受保护。
  2. 向自定义类添加2个隐式转换:一个用于从GUID转换为类的实例,另一个用于从类的实例转换为GUID(有关详细信息,请参阅下文)。
  3. 为公开自定义类型的公共属性的模型类创建一个分部类,并在getter和setter中直接传递给私有/受保护的GUID属性(由于具有此属性,您将能够执行此操作实现了隐式转换)。
  4. 就EF而言,您只拥有Guid属性,但只要您的模型知道您何时编码,您就拥有自定义类型属性。

    创建隐式转换:

    public class MyClass
    {
        public Guid Key { get; set; }
    
        public static implicit operator Guid(MyClass c)
        {
            return c.Key;
        }
    
        public static implicit operator MyClass(Guid g)
        {
            return new MyClass { Key = g; }
        }
    }