0

我使用 Asp.Net MVC,实体框架。我有一个如下所示的表格。

在此处输入图像描述

在这里,下拉列表是从一个表(类型)中填充的。复选框是从另一个表(测试)填充的。表格如下:

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 进行了此操作。我将选中的 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();
    }

它工作。但我为这个过程寻找更好的解决方案。有人可以给我任何想法吗?谢谢。

4

2 回答 2

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;}
}
于 2013-08-05T15:13:41.833 回答
0

好吧,EntityFramework如果要创建多对多关系对象,则需要创建“链接”实体的新对象。不幸的是,不可能添加第一个对象,添加第二个对象并说“伙计们,你们处于多对多关系中。那你快乐吗?” :) 您需要创建关系对象,在其中设置适当的字段(我认为这些是两个对象本身的 id)并将其添加到模型中的关系集合(实体)中。但在这样做之前,您需要确保带有您要链接的数据的对象已经存在于数据库中。否则会报错

此外,无需手动创建事务,因为 EF 会在您每次获取/保存数据时自动为您创建

于 2016-01-08T21:23:09.560 回答