我在使用EF方面遇到了麻烦,并且不知道如何正确处理它。 我有2个数据库表:WebResource和UserGroup。我为他们制作了界面:
public interface IUserGroup
{
int Id { get; set; }
string Name { get; set; }
string DisplayName { get; set; }
}
public interface IWebResource
{
int Id { get; set; }
int Group_Id { get; set; }
IUserGroup Group { get; set; }
}
我还创建了一个接口IUsersRepository,它允许我访问我的数据库对象。
public interface IUsersRepository
{
List<IUserGroup> UserGroups { get; set; }
List<IWebResource> Controllers { get; set; }
//TODO a little bit incorrect method
List<IWebResource> GetUserResources(string username);
List<IWebResource> GetResourcesByRole(string roleName);
List<IWebResource> GetResourcesByController(string controllerName);
}
然后我做了2个实现:Ado.Net实现,对这个问题和EF实现没什么兴趣,看起来像这样:
public class UserGroup:IUserGroup
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[StringLength(50)]
public string Name { get; set; }
[StringLength(50)]
public string DisplayName { get; set; }
}
public class WebResource:IWebResource
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public int Group_Id { get; set; }
[ForeignKey("Group_Id")]
public IUserGroup Group { get; set; }
}
在我的用户存储库中,我有一个方法:
public List<IWebResource> GetResourcesByController(string controllerName)
{
var items = this.Controllers.Include("Group")
.Where(c => c.ResourcePath == controllerName).ToList();
var controllerGroups = new List<IWebResource>(items);
return controllerGroups;
}
这不起作用。我得到了一个例外&#34;在WebResource&#34;中找不到导航属性组。然后我尝试了这个:
public class WebResource:IWebResource
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public int Group_Id { get; set; }
public IUserGroup Group
{
get { return EfGroup; }
set { EfGroup = new UserGroup(); }
}
[ForeignKey("Group_Id")]
public UserGroup EfGroup { get; set; }
}
并将Include(&#34; Group&#34;)更改为Include(&#34; EfGroup&#34;)。现在它很酷,但非常非常难看,我完全不喜欢它。我该如何正确实现?