2017-01-09 4 views
-1

私はコードを実行しようとしている間に多くのエラーが発生しています。私はこれに新しく、新しくなっています。codefirstでテーブルを作成する方法

私のコードを確認して、私がこれで逃したものを手伝ってもらえますか?

ルールは複数のエラーを作成して取得していません。あなたの助けが私に何が間違っているかを理解するのに役立ちます。

マイクラス "のClass1.cs"

public class Login 
    { 
     [Required] 
     public string username { get; set; } 
     [Required] 
     public string password{ get; set; } 

    } 
} 
public class LoginContext : DbContext 
{ 
    public LoginContext() : base("LoginDBConnectionString") 
    { 

     Database.SetInitializer<LoginContext>(new DropCreateDatabaseIfModelChanges<LoginContext>()); 
    } 


    public DbSet<username> username { get; set; } 
    public DbSet<password> password { get; set; } 

} 

Context.cs

using System.Data.Entity.ModelConfiguration.Conventions; 
using System.Linq; 
using System.Web; 
using System.Web.UI.WebControls; 
using System.Data.Entity; 
using Jquery1.Models; 

namespace Jquery1.Models 
{ 
    public class Logincontext: DbContext 
    { 
     public Logincontext() : base ("LoginDBConnectionString") 
     { 

     } 

     public DbSet<Login> Logins{ get; set; } 

    } 
    } 

class program 
{ 
    static void Main(string[] args) 
    { 

     using (var ctx = new Logincontext()) 
     { 
      ctx.Database.Create(); 
     }`enter code here` 
    } 
} 
+0

さらに多くの情報を提供する必要があります。あなたのコードはどこですか?どのようなエラー?彼らはどこに投げ込まれますか? –

+0

@David Thnx、私のコードには – shashank

+0

が付属しています。そうしないと、人々があなたを助けるのが非常に難しくなります。なぜなら、両方の例でLoginContextが異なるのはなぜですか?ユーザー名とパスワードのクラスはどこですか? DbSetはDB内のテーブルを表していますが、カラムと混同していると思います。 –

答えて

1

こんにちは、私は私と一緒に、この使用fluent apiクマを説明させてください、少し

DbContextを作成してください。

public class MyDbContext : DbContext 
{ 
    public MyDbContext() 
     : base("name=MyConnection") 
    { 
     Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDbContext, YourApplication.Migrations.Configuration>("MyConnection")); 
    } 
    public DbSet<Users> Users { get; set; } 

    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     //here you can MAP Your Models/Entities, but i am going to show you something more interesting. so keep up. 
     modelBuilder.Configurations.Add(new UsersMap()); 
    } 
} 

あなたのアプリケーションルートに移行フォルダを作成して、そこにConfigurationクラスを作成してください(なぜですか?)あなたはEFの変更の移行があなたのテーブルを更新します作っそのたび):

internal sealed class Configuration : DbMigrationsConfiguration<YourApplication.Infrastructure.Data.MyDbContext> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = true; 
     //this feature on true can result in unwanted/unexpected dataloss 
     AutomaticMigrationDataLossAllowed = true; 
     ContextKey = "YourApplication.Infrastructure.Data.MyDbContext"; 
    } 

    protected override void Seed(YourApplication.Infrastructure.Data.MyDbContext context) 
    { 
     // This method will be called after migrating to the latest version. 

     // You can use the DbSet<T>.AddOrUpdate() helper extension method 
     // to avoid creating duplicate seed data. E.g. 
     // 
     // context.People.AddOrUpdate(
     //  p => p.FullName, 
     //  new Person { FullName = "Andrew Peters" }, 
     //  new Person { FullName = "Brice Lambson" }, 
     //  new Person { FullName = "Rowan Miller" } 
     // ); 
     // 
    } 
} 

は今すぐに行くとあなたのPOCOクラスを作成します。私は自分のコードをきれいに書くようにしています。例えば、私は以下のようなModelを作ったとき、私はEntityBaseIdすべてのために作成した理由です:

public class EntityBase 
{ 
    public int Id { get; set; } 
} 

をし、それを実装し、私のModel

public class User: EntityBase 
{ 
    public string Example1{ get; set; } 
    public string Example2{ get; set; } 
    public string Example3{ get; set; } 
} 

とマッピングのために私は以下のような別のクラスを作成します。そして、Fluent Apiを使用する:あなたは流暢なAPIを使用している場合は

public class UserMap : EntityTypeConfiguration<User> 
{ 
    public UserMap() 
    { 
     //declaring the table name 
     ToTable("TblUser"); 
     //declaring primary key of the table 
     HasKey(x => x.Id); 
     //declaring a property from poco class is required 
     Property(x => x.Example1) 
      .IsRequired(); 
     //etc 

    } 
} 

は注意してください、あなたは私たちべきではありませんeデータ注釈。ハッピーコーディング。

+0

また、実稼働環境での自動移行を無効にすることを忘れないでください。現在の設定により、予期しないデータロスが発生する可能性があります。 –

+1

@RobAngelierがありがとう – Valkyrie

0

エンティティフレームワークは、standards-or-elseの概念を使用します。あなたの商品をかなり標準的にしたいのであれば、多くの情報を提供する必要はありません。テーブルの名前を異ならせたり、カラムが標準と異なるようにするには、Attributes(使用するメソッド)またはFluent APIを使用して余分な情報を提供する必要があります。

テーブルになるすべてのクラスにはプライマリキーが必要です。デフォルトでは、あなたのクラスプロパティIDを与えるために、またはあなたのクラスの名前は、IDが続く財産を与えることです:

public class Login 
{ 
    public int Id {get; set;} 
    public string UserName {get; set;} 
    public string Password {get; set;} 
} 
public class MyDbContext : DbContext 
{ 
    public DbSet<Login> Logins {get; set;} 
} 

これはあなたに複数あるデフォルトの名前を持つテーブルを与えるのに十分でなければなりませんあなたのクラス名のログイン。

  • ID:主キー
  • 名:NULLとすることができる文字列この場合にヌル
  • パスワードでよいストリング、テーブルの各レコードは、3つの列を有しています。

Requires属性は、UserNameとPropertyがnullでないことを保証しますが、空でないことを防ぎません。私はそれがあなたのために十分であるかどうかはわかりません。

IDではなく、あなたが外部キーとしてログインIDを自由に使用することが:

public int LoginId {get; set;} 

あなたは両方の方法を使用し表示されます。どちらにも利点があります。 Idを使用すると、どのプロパティがプライマリキーであるかがすぐにわかります。 LoginIdは外部キーとしても使用できます。 LoginIdという名前だけでは、それがプライマリキーであるか外部キーであるかを知るには不十分です。

通常、デフォルト値はアイテムが単数形であるアイテムのコレクションの複数形です。ここでは、クラスとしてのログインと、このクラスのオブジェクトのセットとしてのログインが表示されます。

Entity Frameworkのを使用して軌道に乗るために私をたくさん助けた記事では、多くの-に、 this entity framework tutorial

チュートリアルでは、デフォルトを使用する方法について説明しますが、どのように外部キーと1対多の関係を作成するために

ましたさまざまな継承戦略、およびデフォルトモデルに満足していない場合の対処方法について説明します。

関連する問題