[英]How do I create two associated entities at one time with EF4 Code-First
[英]Can I use and return EF4 code-first POCO entities as their interface?
鑒於問題后面的代碼,我從EF4代碼優先API獲得以下錯誤:
給定屬性“角色”不是受支持的導航屬性。 屬性元素類型“IRole”不是受支持的實體類型。 不支持接口類型。
基本上,我有一個類似於以下的存儲庫:
public class Repository : IRepository {
private IEntityProvider _provider;
public Repository(IEntityProvider provider) {
_provider = provider;
}
public IUser GetUser(int id) {
return _provider.FindUser(id);
}
}
請注意,IRepository.GetUser返回一個IUser。
假設我的IEntityProvider實現看起來像這樣。
public class EntityProvider : IEntityProvider {
public IUser FindUser(int id) {
/* Using Entity Framework */
IUser entity;
using (var ctx = new MyDbContext()) {
entity = (from n in ctx.Users
where n.Id == id
select (IUser)n).FirstOrDefault();
}
return entity;
}
}
這里的關鍵是IUser接口有一個名為Roles的List <IRole>屬性。 因此,似乎實體框架代碼首先無法弄清楚用於實現屬性所需的IRole接口的類。
下面是將在整個系統中使用的接口和POCO實體,並且希望也可以與EF4一起使用。
public interface IUser {
int Id { get; set; }
string Name { get; set; }
List<IRole> Roles { get; set; }
}
public interface IRole {
int Id { get; set; }
string Name { get; set; }
}
public class User : IUser {
public int Id { get; set; }
public string Name { get; set; }
public List<IRole> Roles { get; set; }
}
public class Role : IRole {
public int Id { get; set; }
public string Name { get; set; }
}
我是以錯誤的方式來做這件事的嗎? 有沒有辦法在EF4代碼優先API中執行此操作?
我只能想到以下幾點:
請記住,你需要使基類抽象化(用EF文檔檢查繼承),我建議在其中沒有任何內容的RootEntity,然后是一個帶有一些常見信息的Base實體,如Id,InsertedBy,UpdatedBy like standart字段,它使一切變得更容易。
EF 4 Code First(從CTP5開始)不支持使用接口,並且RTM中也可能不支持使用接口。 我想說在你的DbContext中創建一個抽象類來保存你的對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.