これはstackoverflowに関する私の最初の質問です、私はそれを正しくやっていることを願っています;)検索は私の現在の問題へのヒントを提供しませんでした。ASP.NETMVC4は初めてです。
Razor-HTML-Engineを使用して新しいASP.NETMVC4プロジェクトをセットアップしました。2つのモデルを作成しました。
モデルクライアント
[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を持つ2つのテーブルとテーブル間の関連付け(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()
データベースを確認すると、License-Tableに新しい行が追加されました。正しいクライアントTestclientを指す外部キーClient_Idがあります
しかし、ライセンスの情報をビューに表示しようとすると、エントリがまったくありません。
foreach (var item in Model.Licenses)
{
@Html.DisplayFor(modelItem => item.SerialNumber)
}
デフォルトのController-Methodを使用しています。
public ActionResult Details(int id = 0)
{
Client client = db.Clients.Find(id);
if (client == null)
{
return HttpNotFound();
}
return View(client);
}
誰かが私が間違っていることのヒントを教えてもらえますか?
どうもありがとうございます!