私はEF初心者(任意のバージョン)であり、Google-fooはこれを行う方法を見つけることができませんでした。これは私がこれを間違っているに違いないと思いますが、状況は次のとおりです。
私は間違いなくデータベースが最初の環境にいて、スキーマはコーダーによって更新されません。また、私は「自動」コード生成のファンではないので、デザイナーや EF パワーツールには近づきませんでした (動作を確認するためだけに実行しましたが)。
簡単な Web API 2 エンドポイントをいくつか作成しながら操作できるように、Northwind DB を LocalDB にインポートしました。Northwind で Employees、Shippers、および Region テーブルのスリム化されたモデルを作成したため、これはすべてうまくいきました。Region は複数形ではなく、EF はそれに関して問題を抱えていたため、特に興味深いものでした。とにかく、私はそれを手に入れました。
今の私の悩みは; テーブルの代わりにビューをソースとして使用したいのですが、何をしてもうまくいかないようです。私が試したのは、テーブルと同じようにセットアップすることでした。しかし、それはModelValidationException
エラーを引き起こします。デザイナーから自動生成されたコードを調べてみましたが、洞察が得られませんでした。
私のモデル:
//-- employee, shipper, & region work as expected
public class employee {
public int EmployeeID { get; set; }
public string LastName { get; set; }
public string FirstName { get; set; }
}
public class shipper {
public int ShipperID { get; set; }
public string CompanyName { get; set; }
public string Phone { get; set; }
}
public class region {
public int RegionID { get; set; }
public string RegionDescription { get; set; }
}
//-- invoice is a view (actual viewname is 'Invoices')
//-- so i followed the same rules as i did for employee & shipper
//-- i have tried uppercase 'I' as well as a plural version of the model
public class invoice {
public string CustomerID { get; set; }
public string CustomerName { get; set; }
public string Salesperson { get; set; }
public int OrderID { get; set; }
public int ProductID { get; set; }
public string ProductName { get; set; }
}
私のコンテキストは次のようになります。
public class NorthwindDBContext : DbContext {
public DbSet<Employee> Employees { get; set; }
public DbSet<shipper> Shippers { get; set; }
public DbSet<region> Regions { get; set; }
public DbSet<Invoice> Invoices { get; set; } //-- offending line of code
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
//--- fix for Region being singular instead of plural
modelBuilder.Entity<region>().ToTable("Region");
}
}
public DbSet<Invoice> Invoices { get; set; }
コンテキスト内の行をコメントアウトすると、すべてが機能します。行が存在するだけで (Invoices プロパティを参照していなくても) ModelValidationException
、とにかくコンテキストを使用するとエラーが発生します。
ここで私が間違っていることを誰か教えてもらえますか? ありがとう。
更新: コントローラーの 1 つでこれを試しましたが、レコードを取得する限りは機能しましたが、これが正しいパスであるかどうかを知るにはあまりにも初心者です。
using (var dbContext = new NorthwindDBContext()) {
return dbContext.Database.SqlQuery<Invoice>("select * from invoices").ToList();
}