这是我关于stackoverflow的第一个问题,我希望我做对了;)搜索没有为我当前的问题提供任何提示。我是 ASP.NET MVC 4 的新手。
我已经使用 Razor-HTML-Engine 建立了一个新的 ASP.NET MVC 4 项目。我创建了两个模型:
模型客户端
[Table("Clients")]
public class Client
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string ContactName { get; set; }
public ICollection<License> Licenses { get; set; }
}
模型许可证
[Table("Licenses")]
public class License
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string SerialNumber { get; set; }
public ICollection<ActivationHistory> ActivationHistory { get; set; }
}
我读到我必须创建一个从 DbContext 派生的新类才能使其正常工作:
public class ClientDbContext : DbContext
{
public DbSet<Client> Clients { get; set; }
public DbSet<License> Licenses { get; set; }
}
在我看来,这给了我:
- 两个具有 PrimaryKeys 的表以及表之间的关联 (1:N)
- 能够在使用 db.SaveChanges() 后创建客户端对象并用于
Client.Licenses.Add()
向表中添加新元素 拥有所有许可证的客户使用
var t = db.Clients.Single(a => a.Id == 1);
到目前为止我是对的吗?
我现在向客户端添加了示例数据:
// Get Context
var c = new ClientDbContext();
// Create new License
var n1 = new License();
// Testdata
n1.SerialNumber = "12345";
// Get test Client
var test = c.Clients.Single(v => v.ContactName.Contains("Testclient"));
// Add test License to Client
test.Licenses.Add(n1);
// Save Changes
c.SaveChanges()
检查数据库,在许可证表中添加了一个新行。有一个外键 Client_Id 指向正确的客户端Testclient
但是,如果我尝试在视图上显示来自许可证的信息,则根本没有条目:
foreach (var item in Model.Licenses)
{
@Html.DisplayFor(modelItem => item.SerialNumber)
}
我正在使用默认的控制器方法:
public ActionResult Details(int id = 0)
{
Client client = db.Clients.Find(id);
if (client == null)
{
return HttpNotFound();
}
return View(client);
}
谁能给我一个提示我做错了什么?
非常感谢!