2013-08-05 39 views
0

我使用Asp.Net MVC實體框架。我有一個如下所示的表單。在Asp.Net中保存多對多關係表MVC

enter image description here

這裏,下拉列表是從一個表(類型)填充。複選框從另一個表格(測試)填充。表格如下:

public class Types 
{ 
    public int TypesID{get;set;} 
    public string TestName { get; set; } 
    public string TestExplanation { get; set; } 
    public int TestTime { get; set; } 
} 

public class Tests 
{ 
    public int TestID{get;set; 
    public string Name { get; set; } 
    public string Code { get; set; } 
} 

public class Types_Tests 
{ 
    public int Types_TestsID{ get; set; } 
    public int TypesID { get; set; } 
    public int TestsID { get; set; } 

    public virtual Types Types { get; set; } 
    public virtual Tests Tests { get; set; } 
} 

Types_test表是類型和測試之間的關係表。當我點擊Kaydet按鈕時,它會保存類型和檢查測試。我使用ViewBag,javascript和hdnvalue.I添加了checkboz值到hdntext。我做了如下的保存過程:

[HttpPost] 
public ActionResult Index(string drpType, string hdntesttypes) 
    { 
     var TypeList = Types.GetAll(); 
     ViewBag.TypesList = new SelectList(TypeList, "Id", "Name"); 

     var testypeList = testTypes.GetAll(); 
     ViewBag.TestTypesList = new SelectList(testypeList, "Id", "TestName"); 


     GenericRepository<TestDisabledTypes> testDisabledRepository = new GenericRepository<TestDisabledTypes>(_context); 

     if (!string.IsNullOrEmpty(hdntesttypes)) 
     { 
      string[] disabletypesArray = hdntesttypes.Split(','); 

      using (TransactionScope trns = new TransactionScope()) 
      { 

       for (int i = 0; i < disabletypesArray.Length; i++) 
       { 
        Test_Types types = new Test_Types(); 
        types.TestTypesID = Convert.ToInt32(disabletypesArray[i]); 
        types.TypesID = Convert.ToInt32(drpType); 
        testDisabledRepository.Insert(types); 
       } 

       trns.Complete(); 

      } 
     } 

     return View(); 
    } 

它是wokrs。但是我爲這個過程尋找更好的解決方案。有人可以給我任何想法嗎? 謝謝。

回答

0

如果您不需要您實體類的其他屬性,則不需要創建鏈接表。 只需定義以下類,EF將自動爲您生成鏈接表。

public class Type 
{ 
    public int TypesID{get;set;} 
    public string TestName { get; set; } 
    public string TestExplanation { get; set; } 
    public int TestTime { get; set; } 
    public ICollection<Test> Tests { get; set; } 
} 

public class Test 
{ 
    public int TestID{get;set; 
    public string Name { get; set; } 
    public string Code { get; set; } 
    public ICollection<Type> Types {get;set;} 
} 
+0

我怎麼能採取速滑運動員的肌肉在這種情況下,表的關係。 – miyamotomusashi

+1

你不需要,你使用對象,不直接與關係一起工作。這是EF的做法 –

0

那麼,在EntityFramework如果你想創建一個多對多的關係對象,你需要創建一個「連接」實體的新對象。不幸的是,不可能添加第一個對象,添加第二個對象並且說「夥計們,你們處於多對多的關係中,那麼你是否開心?」 :)你需要創建關係對象,在其中設置適當的字段(我認爲這些是兩個對象本身的ID),並將其添加到模型中的關係集合(實體)。但是在這樣做之前您需要確保包含數據的對象已經存在於數據庫中。否則,你會得到一個錯誤

而且它不是必需的,因爲EF自動會爲你每次得到的時間來手動創建交易/保存數據