C# 实体代码第一个自定义数据类型
关于实体框架中自定义数据类型和自动执行操作的2个问题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 } /
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
-在EF执行数据库中的更改之前激发ObjectContext.SavingChanges
如果重写
SaveChanges
方法,您可以添加一些自定义事件。下次您应该问两个独立的问题,因为它们不相关-您很可能会得到每个问题的正确答案。@Ladislav Mrnka,事后看来,您完全正确。谢谢:)