1

モデル データを LocalDb v11.0 SQL サーバーに格納する単純な MVC4 インターネット アプリを正常にセットアップしました。コード ファーストのアプローチを使用してデータベースを生成しましたが、データベースのテーブル フィールドはモデル データベース コンテキストとは異なります。

public class Record
{
    public int Id { get; set; }
    public string PlantLocation { get; set; }
    public Plant PlantType { get; set; }
    public string Description { get; set; }
}
public class Plant
{
    public int Id { get; set; }
    public string Name { get; set; }
}
public class RecordContext : DbContext
{
    public DbSet<Record> Records { get; set; }
    public DbSet<Plant> Plants { get; set; }
}

dbo.Records Table 
[Id]            INT            IDENTITY (1, 1) NOT NULL,
[PlantLocation] NVARCHAR (MAX) NULL,
[Description]   NVARCHAR (MAX) NULL,
**[PlantType_Id]  INT            NULL,**

テーブル データをプルアップすると、選択したプラントの Id を示す PlantType_ID を使用して、すべてのフィールドが正しく入力されます。

  • PlantType_ID が RecordContext にない場合、PlantType_ID を使用してビューにプラントの ID を表示する (またはこの保存されたデータを使用する) にはどうすればよいですか?

IDを取得するために次のことを試みましたが、役に立ちませんでした:

        @Html.DisplayFor(modelItem => item.PlantType.Id)

疑問に思っている人がいれば、ビルド エラーやランタイム エラーは発生しません。どんな洞察も高く評価されます。

4

3 に答える 3

2

virtualplant プロパティに追加して、遅延読み込みを許可します。

public virtual Plant PlantType { get; set; }

N+1の問題を回避するために、同じ初期クエリの一部として PlantType レコードを戻すように EF に指示できます。何かのようなもの:

var record = db.Records.Include("PlantType").First();

ラムダを使用して少し良くするための拡張メソッドがあります。

var record = c.Records.Include(i => i.PlantType).First();

public static class Extensions
{
    public static IQueryable<T> Include<T, TProperty>(this IQueryable<T> source, Expression<Func<T, TProperty>> path) where T : class
    {
        return System.Data.Entity.DbExtensions.Include(source, path);
    }
}

編集

別の方法として、id だけを求めている場合は、次のプロパティを Record モデルに追加することもできます。

public int PlantTypeId { get; set; }

データベース構造はほとんど同じままです (制約名は変更されます)。 ただし、剃刀の構文を次のように変更できるようになりました。

@Html.DisplayFor(modelItem => item.PlantTypeId)

includeコメントを追加する必要もありません。

于 2013-06-07T07:28:23.363 に答える
0

植物名を表示したい場合は、次を直接使用できます。

@Html.DisplayFor(modelItem => item.PlantType.Name)
于 2013-06-07T05:56:34.127 に答える