我的工作有以下條件的項目准入控制:複雜關係/與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