ASP.NET MVC4 と CodeFirst の関係に問題があり、外部キーに関連するこれらのテーブルで値を返すことにも問題があります。
まず、正しく行っているかどうかを見てみましょう。
これが私のコードの例です:
人物クラス
public class Person {
public int Id { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
public City City { get; set; }
}
シティクラス
public class City {
public int Id { get; set; }
public string Name { get; set; }
}
したがって、これにより、データベースは見栄えの良い関係を作成し、非常にうまく機能することがわかりました。このコードの後に、次のようなテーブルがあります。
Person
--Id (PK)
--Name
--Surname
--City_Id (FK)
都市
--ID
(PK) --名前
これにシードを入力しました。例を次に示します。
context.Person.AddOrUpdate(p => p.Name,
new Person { Name = "Me", City = new City { Name = "Ludlow" } }
);
そして、このように情報をビューに取得する必要がある場合...
MyDataBase.cs
public class LeilaoDb : DbContext
{
public DbSet<Person> Persons { get; set; }
public DbSet<City> Cities { get; set; }
}
HomeController.cs
MyDataBase _db = new MyDataBase();
public ActionResult Index()
{
var model = _db.Persons.ToList();
return View(model);
}
ホーム/Index.cshtml
@model IEnumerable<testingproject.Models.Person>
@{
ViewBag.Title = "Home Page";
}
@foreach (var item in Model)
{
@Html.Partial( "_Person", item );
}
_Person.cshtml
@model testingproject.Models.Person
<div>
<h3>@Model.Name</h3>
@Model.City.Name
</div>
null 例外が発生します...
Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
それで、何が問題なのですか?
解決:
私は解決策を見つけました、
MyDataBase _db = new MyDataBase();
public ActionResult Index()
{
var model = _db.Persons.ToList();
return View(model);
}
このコードは、リレーションシップを実行する必要がない場合に過負荷にならないように、人物のみを取得します。Include()
これらの関係をメソッドでいつ行う必要があるかを指定する必要があります。
この後は簡単です:
MyDataBase _db = new MyDataBase();
public ActionResult Index()
{
var model = _db.Persons.Include("City");
return View(model);
}
このメソッドに文字列を渡すのはおかしいと思いますが、大丈夫です。@Model.City.Name
本当に必要な場合は、値を返すことができるようになりました。
私はこのウェブサイトhereで解決策を見つけました