2017-01-09 4 views
-1

Я работаю над созданием страницы входа в C# с использованием подхода Code First, в этом я получаю много ошибок при попытке выполнить код. Я новичок в этом.Как создать таблицы в подходе 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 представляет таблицу в БД, я думаю, вы смешиваете их со столбцами –

ответ

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, как показано ниже, я создать EntityBase для каждого Id:

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:

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 

    } 
} 

знать, если вы используете свободно API, вы не должны нас e Аннотации данных. Счастливое кодирование.

+0

Кроме того, не забудьте отключить автоматическую миграцию в производственных средах. Текущая конфигурация может привести к нежелательному/неожиданному dataloss. –

+1

@RobAngelier включено спасибо – Valkyrie

0

В рамке-каркасе Entity используется концепция стандартов или-else. Если вы хотите, чтобы ваши товары были достаточно стандартными, вы не должны предоставлять много информации. Если вы хотите, чтобы ваши таблицы имели разные имена или ваши столбцы отличались от стандартных, вам необходимо предоставить дополнительную информацию, используя либо атрибуты (используемый вами метод), либо свободный API.

Каждый класс, который должен стать таблицей, должен иметь основной ключ. По умолчанию, чтобы дать вашему классу идентификатор свойства, или дать свойству имени вашего класса следует 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: первичный ключ
  • UserName: строка, которая в этом случае может быть нулевым
  • PassWord: строка, которая может быть нулевым.

Ваш атрибут Requires гарантирует, что ваше имя пользователя и свойство не являются нулевыми, но они не будут препятствовать их пусту. Я не уверен, что этого достаточно для вас.

Вместо Id ваш свободно использовать LoginID в качестве внешнего ключа:

public int LoginId {get; set;} 

Вы увидите оба метода используются. Оба имеют свои преимущества. Использование Id показывает вам, какое свойство является основным ключом. LoginId также может использоваться как внешний ключ. Имя LoginId не достаточно, чтобы определить, является ли он первичным ключом или внешним ключом.

По умолчанию обычно используются множественные числа для коллекций элементов, где элемент является единственной формой. Здесь вы увидите Login as class и Logins как набор объектов этого класса.

В статье, которая помогла мне много, чтобы попасть на дорожку с помощью Entity Framework был this entity framework tutorial

В учебном пособии рассказывается о том, как использовать по умолчанию, как создать один-ко-многим отношений с внешними ключами, многие к - много, различные стратегии наследования и что делать, если вас не устраивает модель по умолчанию.