我的工作有以下条件的项目准入控制:复杂关系/与ASP.NET MVC 3和EF 4.1和POCO
- Visual Studio 2010中
- ASP.NET MVC 3
- EF 4.1(可以用别的东西的话推荐)
- 守则第一
我想下面的模型,但我坚持我对如何做到这一点BES思考吨。
我有这些对象。
public class Facility
{
public virtual int FacilityId;
public virtual string Name;
public virtual List<TaskCategory> TaskCategories;
}
public class TaskCategory
{
public virtual int TaskCategoryId;
public virtual string Name;
}
public class User
{
public virtual int UserId;
public virtual string Username;
}
设施和TaskCategory是一个多到多的关系 设施和用户是一对多的关系(一个设施可以有多个用户,一个用户只能属于一个设施)
现在我需要一些方法来这三个对象连接,以便满足以下条件: - 在系统中,应该能够将用户连接到特定的设备和某些TaskCategory
在我想传统的数据库建模如下:
User_id, Facility_id, TaskCategory_id
1, 1, 1
1, 1, 2
2, 1, 1
1, 2, 1
这意味着用户1将在基金获得TaskCategories 1和2中的设备1和TaskCateogry 1 2 用户2将有TaskCategory 1设施1
访问这是否有道理,以及如何在与EF 4.1(或其他ORM)一起使用的面向对象环境中执行此操作。
UPDATE: 下面的代码是我最终使用(这里不包括一些无关紧要件):
public class Facility
{
public int Id { get; set; }
public string Name { get; set; }
private ICollection<FacilityMembership> _facilityMembership;
public virtual ICollection<FacilityMembership> FacilityMembership
{
get { return_facilityManager ?? (_facilityManager = new HashSet<FacilityMembership>(); }
set { _facilityManager = value; }
}
}
}
public class TaskCategory
{
public int Id { get; set; }
public string Name { get; set; }
private ICollection<FacilityMembership> _taskMemberships;
public virtual ICollection<FacilityMembership> TaskMemberships
{
get { return _taskMemberships?? (_taskMemberships= new HashSet<FacilityMembership>()); }
set { _taskMemberships = value; }
}
}
public class User
{
public int Id { get; set; }
public string Username { get; set; }
private ICollection<FacilityMembership> _facilityMembership;
public virtual ICollection<FacilityMembership> FacilityMembership
{
get { return_facilityManager ?? (_facilityManager = new HashSet<FacilityMembership>(); }
set { _facilityManager = value; }
}
}
public class FacilityMembership
{
public int Id { get; set; }
public int FacilityId { get; set; }
public int UserId { get; set; }
private ICollection<TaskCategory> _taskCategories;
public virtual ICollection<TaskCategory> TaskCategories
{
get { return _taskCategories ?? (_taskCategories = new HashSet<TaskCategories>()); }
set { _taskCategories = value; }
}
}
,然后通过流畅API映射:
modelBuilder.Entity<FacilityMembership>().HasKey(fm => fm.Id);
modelBuilder.Entity<FacilityMembership>()
.HasMany(fm => fm.TaskCategories)
.WithMany(tc => tc.FacilityMemberships)
.Map(m =>
{
m.MapLeftKey("FacilityMembershipId");
m.MapRightKey("TaskCategoryId");
});
你需要建立设施和用户之间的关系..我认为这是缺少.. –
它的成立,也许我简化了很多在我上面的例子。这些类有更多的属性。实际上,用户拥有“公共虚拟列表设施” –
Sverker84