2012-03-10 82 views
0

我有一個edmx文件被設置其Code Generation StrategyNone和T4模板設置爲它,其中I除去工廠方法創作邏輯。我通過部分類爲單獨文件中的少數實體引入了一些額外的方法。導出自動生成實體類

例:我已經介紹了一些方法,對部分類別的實體User和我派生的類AdminPersonUser在這裏我想介紹一些其他的方法。

我這裏面臨的是問題,而分配值的Admin導航屬性時,它拋出異常Object mapping could not be found for Type with identity 'CivilRegistry.ControlledModel.Admin'.

用戶類別:

public partial class User 
{ 

    protected static UserRepository repository = new UserRepository(); 

    public User Insert(User user) 
    { 
     user.AddedDate = DateTime.Now; 
     user.AddedUserId = this.UserId; 
     return repository.Insert(user); 
    } 
    // 
    //Other methods goes here. 
    // 
} 

管理類:

public class Admin : User 
{ 
    public Admin() { } 

    private Admin(User user) 
    { 
     this.UserName = user.UserName; 
     // 
     //Other properties 
     // 
     this.AddedUser = user.AddedUser; //This line throws, Exception. 
    } 

    public static Admin FindBy(int id) 
    { 
     //repository.FindByID returns an instance of User entity. 
     return new Admin(repository.FindByID(user => user.UserId == id && user.RoleId == (int)RoleEnum.Admin)); 
    } 
} 

我該如何解決這個問題?

+0

你有沒有考慮過去代碼/ POCO?並且請多說一點你使用的T4模板 - 沒有看到這個,這個問題很難回答。 – Carsten 2012-03-10 07:26:38

+0

我剛剛在T4上註釋掉了'WriteFactoryMethod(entity,code)'這一行,除了這一切與自動生成相同外。 – NaveenBhat 2012-03-10 07:32:13

+0

@CarstenKönig:我已經更新了我的問題。請讓我知道,如果你需要進一步澄清。 – NaveenBhat 2012-03-10 07:41:28

回答

1

不支持。您不能在EDMX中定義實體,然後從代碼中的實體派生額外的類。以這種方式創建的派生類不再是實體,無法由EF檢索或保留,因爲EF不知道如何映射它們。

爲什麼它在指定導航屬性失敗的原因是,EF知道AdminUser並嘗試將其附加到上下文,但它並沒有找到映射(EDMX)的Admin類型。

解決方案是映射繼承=將您的繼承映射到EDMX,您將在其中定義User實體和派生的PersonAdmin實體。 Here你有一些教程。