使用實體框架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; }
}
這將導致在數據庫中,和SomeEntity OtherEntity,這將對每個四個字段兩個表。 SomeEntity具有SomeEntityId,Name,CreatedOn和CreatedBy,而OtherEntity具有OtherEntityId,Amount,CreatedOn和CreatedBy。沒有IBaseEntity表。
我期望在設計器中看到這一點,因爲IBaseEntity是具有CreatedOn和CreatedBy屬性的抽象實體,兩個具體實體只具有它們的非派生屬性 - 所以SomeEntity只具有SomeEntityId和Name。在具體實體和抽象實體之間存在着繼承關係。
然後我想有automatic column updates這些對象保存它們的時候,就像這樣:
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;
}
}
}
}
}
我剛開始接觸實體框架和它看起來這應該可以很容易地被公平進行,但如何真正實現它正在逃避我。我在這裏偏離軌道還是在Entity Framework 4中可能會出現這種情況?每個具體類型策略表看起來像解決方案,但我一直無法得到它的工作。
以防萬一[類型是否實現了接口](http://www.hanselman.com/blog/DoesATypeImplementAnInterface.aspx) – tschmit007 2013-02-04 14:53:44