0

多層 ASP.NET MVC Web アプリケーションを開発していますが、アプリケーション内のデータの正確なオブジェクト表現を取得できないため、それ以上進めることができません。これはなぜですか?なるべく詳しく書いてみましたが、詳しく知りたい方はご質問ください。私のプロジェクトは次のとおりです。


-MyProject.Data
-MyProject.Logic
-MyProject.Objects
-MyProject.Web



MyProject.Objects.Entitiesからのエンティティ クラス

public class Report
{
    [Key]
    public int Id { get; set; }
    public string ReportName { get; set; }
    public int ProductId { get; set; }
}

public class Product
{
    [Key]
    public int Id { get; set; }
    public string ProductName { get; set; }
    public ICollection<Report> ProductReports { get; set; }
}



MyProject.Dataからの私のコンテキスト

public class MyDb : DbContext
{
    public DbSet<Product> Products { get; set; }
    public DbSet<Report> Reports { get; set; }
}



MyProject.Webのコントローラー

 public class HomeController : Controller
{
    MyDb _db = new MyDb();

    public ActionResult Index()
    {
        var model =
            from p in _db.Products
            orderby p.ProductName ascending
            select p;

        return View(model);
    }
}



最後に、MyProject.Data.Migrations.ConfigurationSeed()からの私のメソッド

protected override void Seed(MyProject.Data.MyDb context)
    {
        context.Products.AddOrUpdate(r => r.ProductName,
                new Product
                {
                    ProductName = "AAA",
                    ProductReports =
                        new List<Report> { 
                            new Report { ReportName = "Report A" },
                            new Report { ReportName = "Report B" },
                            new Report { ReportName = "Report C" }
                            }
                },
                new Product
                {
                    ProductName = "MSI",
                    ProductReports =
                        new List<Report> { 
                            new Report { ReportName = "Report X" },
                            new Report { ReportName = "Report Z" }
                            }
                });
    }




MyProject.Objects.Entities.ProductICollection<Report> ProductReportsから正しい値を取得できない理由がわかりません。MyProject.Webでの結果は次のとおりです。Index()

ここに画像の説明を入力



このフレームワークに少し慣れていないので、最初はデータ構造に関連する問題があると思いました。私の知る限り、データは正しく設定されているようです。これがSQLサーバーの私のデータです

ここに画像の説明を入力




データが正しいように見えることをさらに実証するために、次のクエリを実行して、リレーションが適切に設定されていることを確認しました。クエリと一緒に結果を提供します。

SELECT * From Reports INNER JOIN Products ON Reports.ProductId = Products.Id


ここに画像の説明を入力

4

3 に答える 3

1

前述のように、マッピングが欠落しているようです:

public class Product
{
  [Key]
  public int ProductID { get; set; }
  public string ProductName { get; set; }
  public virtual ICollection<Report> ProductReports { get; set; }
}

public class Report
{
  [Key]
  public int ReportID { get; set; }
  public string ReportName { get; set; }
  public int ProductID { get; set; }
  public virtual Product Product { get; set; }
}

マッピング フィールドの名前は両方のテーブルで同じである必要があり、マッピングは EF を使用して自動的に行われます。また、レポート内で Product.ProductName などを呼び出すことができるように、仮想プロパティをレポートに追加することもできます。

お役に立てれば

于 2013-09-13T18:13:45.470 に答える
1

次のようになります。

public class ReportMap : EntityTypeConfiguration<Report>
    {
        public ReportMap()
        {
            // Primary Key
            this.HasKey(t => t.Id);

            // Properties
            this.Property(t => t.ReportName)
                .IsRequired()
                .HasMaxLength(100);

            // Table & Column Mappings
            this.ToTable("Reports");
            this.Property(t => t.Id).HasColumnName("Id");
            this.Property(t => t.ReportName).HasColumnName("ReportName");

            // Relationships
            this.HasRequired(t => t.Product)
                .WithMany(t => t.ProductReports)
                .HasForeignKey(d => d.ProductId);
        }
    }

そして、Report を次のように Product プロパティも持つように変更します。

public class Report
{
    [Key]
    public int Id { get; set; }
    public string ReportName { get; set; }
    public int ProductId { get; set; }
    public virtual Product Product { get; set; }
}

次に、コンテキストで:

public partial class SomeContext : DbContext
{
    static SomeContext()
    {
        Database.SetInitializer<SomeContext>(null);
    }

    public SomeContext()
        : base("Name=SomeContext")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new ReportMap());
    }
}
于 2013-09-13T18:07:45.260 に答える
1

私が取り組んでいるEF関係の例を次に示します。

public class CourseSection
{
    [Key]
    public int CourseSectionID { get; set; }

    public int CourseID { get; set; }

    public string Title { get; set; }

    public virtual ICollection<SectionContent> SectionContents { get; set; }
}

public class Course
{
    [Key]
    public int CourseID { get; set; }

    [StringLength(50)]
    public string Name { get; set; }

    public virtual ICollection<CourseSection> CourseSections { get; set; }
}
于 2013-09-13T18:47:51.553 に答える