繁体   English   中英

实体代码优先自定义数据类型

[英]Entity Code First Custom Data Type

2有关实体框架中的自定义数据类型并自动执行操作的问题...

  1. 我有一个能够提供其自身的字符串表示形式并从字符串构造其自身的类。 无论如何,是否将此类包含为E-CF类的属性,并在其下创建一个字符串? 例如:

     public class MySpecialClass { public MySpecialClass(string _data) { } // eo ctor public string ToString() { } // eo ToString } // eo MySpecialClass public class EntityObject { public MySpecialClass Special {get; set; } } // eo class EntityObject 

    那真的很有用!

  2. 我有一堆类,其中包含诸如CreatedByModifiedByModifiedDate等。 是否有一种简单的方法可以在首次创建对象时或以后进行修改时自动设置这些设置? 理想情况下,我希望可以挂入一个事件来实现这种行为,因为如果某些字段发生更改,我的某些对象实际上需要写入“历史”表。 其实有没有办法呢? 要知道在更新过程中是否修改了某个字段?

在您的实体中,必须将属性定义为字符串。 EF无法使用自定义类。 每个生成的实体类都定义为局部类,因此您可以在局部类中定义其他属性,这些属性将与您的类型的实例一起使用:

// EF generated part
public partial class EntityObject
{
  protected string SpecialString { get; set; }
}

// Your part
public partial class EntityObject
{
  public MySpecialClass Special
  {
    get
    {
      return MySpecialClass.Deserialize(SpecialString);
    }
    set
    {
      SpecialString = MySpecialClass.Serialize(value);
    }
  }
}

您将无法在Linq-To-Entities查询中使用Special属性。

编辑:

我没有注意到您使用的是代码优先。 在这种情况下,您不对实体使用部分类,并且可以在单个实体中使用相同的方法,其中MySpecialClass将被标记为NotMappedAttribute

对于第二个问题-通常由数据访问层负责(当前非常流行的存储库模式)。 EF中唯一可用的内置事件是

  • ObjectCotnext.ObjectMaterialized从数据库加载数据并创建对象实例时触发
  • ObjectContext.SavingChanges在EF在数据库中执行更改之前触发

如果覆盖SaveChanges方法,则可以添加一些自定义事件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM