Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体代码第一个自定义数据类型_C#_Database_Entity Framework - Fatal编程技术网

C# 实体代码第一个自定义数据类型

C# 实体代码第一个自定义数据类型,c#,database,entity-framework,C#,Database,Entity Framework,关于实体框架中自定义数据类型和自动执行操作的2个问题 我有一个类,它能够提供自身的字符串表示,并从字符串构造自身。是否要将该类作为E-CF类的属性包含,并让它在下面创建一个字符串?e、 g: public class MySpecialClass { public MySpecialClass(string _data) { } // eo ctor public string ToString() { } // eo ToString } /

关于实体框架中自定义数据类型和自动执行操作的2个问题

  • 我有一个类,它能够提供自身的字符串表示,并从字符串构造自身。是否要将该类作为E-CF类的属性包含,并让它在下面创建一个字符串?e、 g:

    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
    
    那真的很有用

  • 我有一大堆类,它们都有一些东西,比如
    CreatedBy
    ModifiedBy
    ModifiedDate
    等等。是否有一种简单的方法可以在首次创建对象时或在以后修改对象时自动设置这些参数?理想情况下,我想要一个事件来实现这种行为,因为如果某些字段发生更改,我的一些对象实际上需要写入“历史”表。事实上,有什么办法可以做到这一点吗?要知道某个字段是否在更新过程中被修改


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

    // 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查询中使用特殊属性

    编辑:

    我没有注意到你正在使用 先编码。在这种情况下,您不使用 实体和用户的分部类 可以在单个实体中使用相同的方法 MySpecialClass将在其中标记为
    NotMappedAttribute

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

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

    如果重写
    SaveChanges
    方法,您可以添加一些自定义事件。

    下次您应该问两个独立的问题,因为它们不相关-您很可能会得到每个问题的正确答案。@Ladislav Mrnka,事后看来,您完全正确。谢谢:)