Chr*_*tta 5 entity-framework-4
使用 Entity Framework 4,我想为我的对象创建一个基接口,以便将基接口的属性实现为每个派生类的表中的字段(而不是在其自己的表中),然后使用界面。
例如,有一个接口和一些类,如下所示:
public interface IBaseEntity
{
public DateTime CreatedOn { get; set; }
public string CreatedBy { get; set; }
}
public class SomeEntity : IBaseEntity
{
public int SomeEntityId { get; }
public string Name { get; set; }
public DateTime CreatedOn { get; set; }
public string CreatedBy { get; set; }
}
public class OtherEntity : IBaseEntity
{
public int OtherEntityId { get; }
public float Amount { get; set; }
public DateTime CreatedOn { get; set; }
public string CreatedBy { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这将导致数据库中出现两个表:SomeEntity 和 OtherEntity,每个表都有四个字段。SomeEntity 具有 SomeEntityId、Name、CreatedOn 和 CreatedBy,OtherEntity 具有 OtherEntityId、Amount、CreatedOn 和 CreatedBy。没有 IBaseEntity 表。
我希望看到它在设计器中显示为 IBaseEntity 是一个具有 CreatedOn 和 CreatedBy 属性的抽象实体,而两个具体实体仅具有其非派生属性 - 因此 SomeEntity 只有 SomeEntityId 和 Name。具体实体和抽象实体之间存在继承关系。
然后我希望在保存这些对象时自动更新列,如下所示:
namespace MyModel
{
public partial class MyEntities
{
partial void OnContextCreated()
{
this.SavingChanges += new EventHandler(OnSavingChanges);
}
private static void OnSavingChanges(object sender, EventArgs e)
{
var stateManager = ((MyEntities)sender).ObjectStateManager;
var insertedEntities = stateManager.GetObjectStateEntries(EntityState.Added);
foreach (ObjectStateEntry stateEntryEntity in insertedEntities)
{
if (stateEntryEntity.Entity is IBaseEntity)
{
IBaseEntity ent = (IBaseEntity)stateEntryEntity.Entity;
ent.CreatedBy = HttpContext.Current.User.Identity.Name;
ent.CreatedOn = DateTime.Now;
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我刚刚开始使用实体框架,看起来这应该能够相当容易地完成,但如何实际实现它却让我无法理解。我是否偏离了轨道,或者这种事情在 Entity Framework 4 中可能发生吗?每个具体类型策略的表似乎是解决方案,但我无法使其发挥作用。
| 归档时间: |
|
| 查看次数: |
4007 次 |
| 最近记录: |