コントローラー:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MvcApplication1.Models;
using System.ComponentModel.DataAnnotations.Schema;
namespace MvcApplication1.Controllers
{
public class studentsController : Controller
{
//
// GET: /students/
public ActionResult details()
{
int id = 16;
studentContext std = new studentContext();
student first = std.details.Single(m => m.RollNo == id);
return View(first);
}
}
}
DbContextモデル:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
namespace MvcApplication1.Models
{
public class studentContext : DbContext
{
public DbSet<student> details { get; set; }
}
}
モデル:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations.Schema;
namespace MvcApplication1.Models
{
[Table("studentdetails")]
public class student
{
public int RollNo;
public string Name;
public string Stream;
public string Div;
}
}
データベーステーブル:
CREATE TABLE [dbo].[studentdetails](
[RollNo] [int] NULL,
[Name] [nvarchar](50) NULL,
[Stream] [nvarchar](50) NULL,
[Div] [nvarchar](50) NULL
)
global.asax.cs
Database.SetInitializer<MvcApplication1.Models.studentContext>(null);
上記のコードは私が取り組んでいるすべてのクラスのリストです。私のアプリケーションを実行するとエラーが発生しています。
「エンティティタイプにキーが定義されていません」とともに「モデル生成中に1つ以上の検証エラーが検出されました」.
Modelクラスは次のように変更する必要があります。
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;
namespace MvcApplication1.Models
{
[Table("studentdetails")]
public class student
{
[Key]
public int RollNo { get; set; }
public string Name { get; set; }
public string Stream { get; set; }
public string Div { get; set; }
}
}
学生クラスのパブリックメンバーがプロパティw/{get; set;}
として定義されていることを確認してください(あなたのクラスはパブリック変数です - よくある間違い).
選択したプロパティの上に[Key]
アノテーションを配置します。
私はこの記事が遅れていることを知っていますが、この解決策は私を助けました:
[Key]
[Column(Order = 0)]
public int RoleId { get; set; }
[Key]の後ろに[Column(Order = 0)]を追加することで、1ずつ増やすことができます。
[Key]
[Column(Order = 1)]
public int RoleIdName { get; set; }
等...
私の場合は、「Entity Frameworkを使用してビュー付きのMVC 5コントローラー」を作成するときにエラーが発生していました。
Modelクラスを作成した後にプロジェクトをビルドするだけでよく、[Key]アノテーションを使用する必要はありません。
[key]を使ってもうまくいきませんでしたが、idプロパティを使ってもうまくいきません。このプロパティをクラスに追加しただけです。
public int id {get; set;}
EFフレームワークが「キーなし」を要求するのは、EFフレームワークがデータベースに主キーを必要とするからです。 EFにどのプロパティがキーであるかを宣言的に伝えるには、[Key]
アノテーションを追加します。あるいは、最速の方法は、ID
プロパティを追加することです。その後、EFフレームワークはデフォルトでID
を主キーとして扱います。
オブジェクトにPrimary Key
として使用されるフィールドが含まれている必要があります。もしId
という名前のフィールドがある場合、これはデフォルトでEntity Frameworkがリンクするオブジェクトの主キーになります。
それ以外の場合は、[Key]
として使用したいフィールドの上にPrimary Key
属性を追加する必要があります。また、System.ComponentModel.DataAnnotations
という名前空間も追加する必要があります。
public class myClass
{
public int Id { get; set; }
[Key]
public string Name { get; set; }
}
さらに覚えておいて、このようなpublicキーワードを追加することを忘れないでください
[Key]
int RoleId { get; set; } //wrong method
あなたはこのようなPublicキーワードを使わなければなりません
[Key]
public int RoleId { get; set; } //correct method
常にkey属性を使う必要はありません。マッピングファイルがキーを正しくアドレス指定していることを確認してください。
this.HasKey(t => t.Key);
this.ToTable("PacketHistory");
this.Property(p => p.Key)
.HasColumnName("PacketHistorySK");
そしてリポジトリのOnModelCreatingにマッピングを追加することを忘れないでください
modelBuilder.Configurations.Add(new PacketHistoryMap());
すべて正しいですが、私の場合はこのようなクラスが2つあります。
namespace WebAPI.Model
{
public class ProductsModel
{
[Table("products")]
public class Products
{
[Key]
public int slno { get; set; }
public int productId { get; set; }
public string ProductName { get; set; }
public int Price { get; set; }
}
}
}
上流階級を削除した後、それは私のためにうまく働きます。