Abuamer Ответов: 2

Сначала вставьте данные в код databse


Iam New In Entity-framework...я создал приложение Windows Application в visual studio 2019
я использую Entity-framework 6.я создал DatabaseContext таким образом
using LedgerGroup.TheLedger.Core.Entities;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace LedgerGroup.TheLedger.Core.Data
{
    public class DatabaseContext: DbContext
    {
        public DatabaseContext() : base("DatabaseConnectionString")
        {
            Database.SetInitializer<databasecontext>(new CreateDatabaseIfNotExists<databasecontext>());
        }
       
        public DbSet<customer> Customers { get; set; }
        
    }
}
а потом создал вот такую таблицу клиентов
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LedgerGroup.TheLedger.Core.Entities
{
    public class Customer:BaseEntity
    {
        public string Name { get; set; }
        public string Telephone { get; set; }
        public string Address { get; set; }
        public string CarType { get; set; }
        public string CarModel { get; set; }
        public string Notes { get; set; }

    }
}
а затем я создаю класс BaseEntity ,который каждая таблица в базе данных получит somecolumns(Id,CreatedBy,LastUpdatedBy,CreatedOn,LastUpdatedOn, bool Deleted)
от этого класса
это код внутри класса BaseEntity
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LedgerGroup.TheLedger.Core.Entities
{
    public class BaseEntity
    {
        public int Id { get; set; }
        public int CreatedBy { get; set; }
        public int LastUpdatedBy { get; set; }
        public DateTime CreatedOn { get; set; }
        public DateTime LastUpdatedOn { get; set; }
        public bool Deleted { get; set; }
    }
}
и я добавляю-миграция CreateTheLedgerDB
которые создают базы данных в мой двигатель базы данных и обновление базы данных

затем я хотел вставить некоторые записи в таблицу customers

я сделал форму под названием AddCustomerForm и в событии BtnAddCustomer_Click(object sender, EventArgs e) использовал некоторый код для вставки данных
но это дает мне эту ошибку
(SqlException: преобразование типа данных datetime2 в тип данных datetime привело к значению вне диапазона.
Заявление было прекращено.)>
может ли кто-нибудь помочь мне

в форме AddCustomerForm я хочу вставить нового клиента

Что я уже пробовал:

private void BtnAddCustomer_Click(object sender, EventArgs e)
        {
            
                using (var context = new DatabaseContext())
                {
                    var customer = new Customer()
                    {
                        Name = txtCustomerName.Text,
                        Telephone = txtCustomerPhone.Text,
                        Address = txtCustomerAddress.Text,
                        CarType = txtCustomerCar.Text,
                        CarModel = txtCustomerCarModel.Text
                    };
                    context.Customers.Add(customer);
                    context.SaveChanges();
                    //TODO:Add MessageManager Class
                    MessageBox.Show("Saved Successfully");
                }
            
        }

Patrice T

В чем заключается вопрос/проблема ?

2 Ответов

Рейтинг:
13

Richard Deeming

Проблема в том, что ваш DateTime свойства по умолчанию сопоставляются с SQL datetime тип. Но это может обрабатывать только даты после 1753-01-01, поскольку DateTime может обрабатывать даты еще до того, как 0001-01-01.

Предполагая, что вы используете SQL 2008 или выше, вы можете изменить сопоставление для хранения столбцов с помощью datetime2 тип, который точно соответствует диапазону .NET-х DateTime тип:

public class BaseEntity
{
    public int Id { get; set; }
    public int CreatedBy { get; set; }
    public int LastUpdatedBy { get; set; }
    [Column(TypeName = "datetime2")]
    public DateTime CreatedOn { get; set; }
    [Column(TypeName = "datetime2")]
    public DateTime LastUpdatedOn { get; set; }
    public bool Deleted { get; set; }
}
Как только вы сделаете это и воссоздадите свою базу данных, вы сможете сохранять записи. Однако вы заметите, что оба CreatedOn и LastUpdateOn столбцы имеют значение 0001-01-01 00:00:00 Это потому, что вы никогда не инициализируете их:
using (var context = new DatabaseContext())
{
    var customer = new Customer
    {
        Name = txtCustomerName.Text,
        Telephone = txtCustomerPhone.Text,
        Address = txtCustomerAddress.Text,
        CarType = txtCustomerCar.Text,
        CarModel = txtCustomerCarModel.Text,
        
        // Set the created and updated dates:
        CreatedOn = DateTime.UtcNow,
        LastUpdatedOn = DateTime.UtcNow,
        // TODO: Set the CreatedBy and LastUpdatedBy properties as well...
    };
    
    context.Customers.Add(customer);
    context.SaveChanges();
    MessageBox.Show("Saved Successfully");
}


Рейтинг:
0

Gerry Schmitz

Используйте отдельный шаг для (повторного)создания базы данных. Держите "обычные" вещи отдельно. Вот одна из моих баз данных EF:

using System.Data.Entity;

namespace HT.Reporting {

   /// <summary>
   /// 
   /// </summary>
   public class ReportingDbContext : DbContext {

      public DbSet<WorkSession> Sessions { get; set; }
      public DbSet<Treatment> Treatments { get; set; }
      public DbSet<EventRecord> LogEntries { get; set; }

      /// <summary>
      /// CONSTRUCTOR.
      /// </summary>
      public ReportingDbContext( string connectionString ) : base( connectionString ) {

      }

      //==============================
      // PUBLIC.
      //==============================

      /// <summary>
      /// 
      /// </summary>
      public static ReportingDbContext GetDbContext() {

         string connectionString = DatabaseAdapter.GetConnectionString();

         ReportingDbContext context = new ReportingDbContext( connectionString );
         return context;
      }

      //====================
      // CREATE.
      //====================

      /// <summary>
      /// Create / recreate.
      /// </summary>
      public static bool CreateDatabase() {

         bool deleted = false;
         bool created = false;

         using ( ReportingDbContext context = ReportingDbContext.GetDbContext() ) {

            Database db = context.Database;

            if ( db.Exists() ) {
               // Deletes db.
               deleted = db.Delete();
            }

            // Creates db.
            db.Initialize( force: true );

            // Confirms db.
            if ( db.Exists() ) {
               created = true;
            }

         }  // end using.

         return created;
      }

      /// <summary>
      /// 
      /// </summary>
      public static bool CreateDatabaseIfNotExists() {

         bool created = false;

         using ( ReportingDbContext context = ReportingDbContext.GetDbContext() ) {

            Database db = context.Database;

            if ( !db.Exists() ) {
               // Creates db.
               db.Initialize( force: true );

               // Confirms.
               if ( db.Exists() ) {
                  created = true;
               }
            }

         }  // end using.

         return created;
      }

      //======================
      // DATABASE.
      //======================

      /// <summary>
      /// 
      /// </summary>
      public static bool DatabaseExists() {

         bool exists = false;

         using ( ReportingDbContext context = ReportingDbContext.GetDbContext() ) {

            Database db = context.Database;
            exists = db.Exists();

         }  // end using.

         return exists;
      }

      /// <summary>
      /// 
      /// </summary>
      public static bool DeleteDatabase() {

         bool deleted = false;

         using ( ReportingDbContext context = ReportingDbContext.GetDbContext() ) {

            Database db = context.Database;

            if ( db.Exists() ) {
               deleted = db.Delete();
            }

         }  // end using.

         return deleted;
      }

   }  // end class.
}