簡體   English   中英

使用EntityFramework將我的實體變量轉換為特定的(實體)類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM