我有两张桌子
public class TestManagementToolsContext : DbContext
{
public DbSet<Test_Case> Test_Cases { get; set; }
public DbSet<Test_Suite> Test_Suites { get; set; }
}
如何在模型中使用 in Test_Suite Test_Cases?
当我向 中添加一个列表List<Test_Case>时Test_Suite,当这个带有案例的列表发生变化时,案例也会发生变化Test_Cases
public ActionResult Create()
{
var query = db.Test_Cases
.Include(c => c.StepAndExpResults)
.AsNoTracking()
.ToList()
.Select(c => new Test_Case
{
Identifier = c.Identifier,
Title = c.Title,
Preconditions = c.Preconditions,
Date = c.Date,
Comments = c.Comments,
Summary = c.Summary,
StepAndExpResults = c.StepAndExpResults
}).ToList();
Test_Suite suite = new Test_Suite();
suite.all_test_cases = query;
return View(suite);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "Id,Name,Description,test_cases_ch,all_test_cases,Date")] Test_Suite test_Suite)
{
if (ModelState.IsValid)
{
int count = 0;
for (int i = 0; i < test_Suite.all_test_cases.Count; i++)
{
if (test_Suite.all_test_cases[i].check == true)
{
//test_Suite.all_test_cases[i].check = false;
if (test_Suite.test_cases_ch == null)
{
test_Suite.test_cases_ch = new List<Test_Case>();
}
Test_Case test_case = new Test_Case();
test_Suite.test_cases_ch.Add(test_case);
test_Suite.test_cases_ch[count] = test_Suite.all_test_cases[i];
count++;
}
}
test_Suite.Date = DateTime.Now;
test_Suite.all_test_cases = null;
db.Test_Suites.Add(test_Suite);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(test_Suite);
}
这是
test_Suite.test_cases_ch[count] = test_Suite.all_test_cases[i];您创建链接副本的地方。因此,改变 的值test_Suite.test_cases_ch[count],改变 和test_Suite.all_test_cases[i]。为避免这种情况,您可以Test_Case向类中添加一个构造函数。现在,让我们这样表示这个类:像这样的构造函数:
或方法
Clone():然后你可以这样使用:
或者:
如果它
Test_Case包含标准类型的字段,int这将起作用string。对于具有自定义类型的字段,您将需要实现Clone().