[英]Casting my entity variable to a specific (entity) type with EntityFramework
我下面有一些這樣的課程:
public class Driver
{
public int Id { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
public string CreatedById { get; set; }
public DateTime? CreatedTime { get; set; }
public string UpdatedById { get; set; }
public DateTime? UpdatedTime { get; set; }
}
請注意最后4個字段。
每次創建/更新實體時,我都會調用一個函數來更新我所有類(CreatedTime,CreatedById,UpdatedTime,UpdatedById)中存在的4個字段。
下面的示例適用於Driver
類:
private void UpdateAdditionalData(EntityInfo entityInfo)
{
var userId = Current.User.Identity.Name;
var entity = (Driver)entityInfo.Entity;
...
if (entityInfo.EntityState == EntityState.Added)
{
entity.CreatedTime = DateTime.Now;
entity.CreatedById = userId;
}
if (entityInfo.EntityState == EntityState.Modified)
{
entity.UpdatedTime = DateTime.Now;
entity.UpdatedById = userId;
}
如您所見,我聲明了一個以前綴(Driver)
強制轉換的entity
變量。
現在,我想調整此代碼,使其能夠引用任何類,而不是專門引用Driver類。
我嘗試了類似的東西:
private void UpdateAdditionalData(EntityInfo entityInfo)
{
var userId = Current.User.Identity.Name.ToUpper();
var typed = entityInfo.Entity.GetType().Name;
var entity = (typed)entityInfo.Entity;
...
因此,我聲明了一個typed
變量,它是用於轉換實體的實體名稱。
但這不起作用,我得到一個錯誤:找不到“類型化”名稱空間的類型。
知道我該怎么做嗎?
謝謝。
通常,此類型無效的底線是靜態的編譯時數據。 您正在嘗試在運行時獲取它。 這意味着將使用復雜的反射和調用。
我認為您想要的是一個可在實體之間共享的接口。
public interface Auditable
{
string CreatedById { get; set; }
DateTime? CreatedTime { get; set; }
string UpdatedById { get; set; }
DateTime? UpdatedTime { get; set; }
}
然后讓您的實體實現該接口。 可以使用實現該接口的任何實體...
var userId = Current.User.Identity.Name.ToUpper();
var entity = entityInfo.Entity as Auditable;
if (entity != null) { /* set the audit values */ }
如果該實體未實現該接口,則您實際上將不會設置審核值。
除非我對您有誤解,否則您是否需要實體的基本類型?
public class Driver : EntityBase
{
public int Id { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
}
基本類型...
public class EntityBase
{
public string CreatedById { get; set; }
public DateTime? CreatedTime { get; set; }
public string UpdatedById { get; set; }
public DateTime? UpdatedTime { get; set; }
}
那么您可以簡單地將其強制轉換為基本類型?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.