Entity Framework hatası

scorpionsx

Hectopat
Katılım
20 Mayıs 2022
Mesajlar
96
Daha fazla  
Cinsiyet
Kadın
Merhaba, .net te bilgileri veritabanına aktaracakken şöyle bir hata aldım. Ama çözümünü bulamadım bir türlü.

Ekran Görüntüsü (30).png
 
Son düzenleyen: Moderatör:
Hocam dbcontextte o lastupdate alanını dbcontexte getdate var diye belirtmen lazım. Şu şekilde:
C#:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<EntityAdıBuraya>()
        .Property(x => x.LastUpdateDate)
        .HasDefaultValueSql("GETDATE()");
}
Tabi sql tarafında da otomatik date atayacak default value vermiş olman lazım.
 
LastUpdatedTable adlı bir sütunun var ve null değer kabul etmiyor. Boş veri göndermişsin oraya. Ona dikkat et.
Ek olarak Blackbox kullandığını görüyorum. Şiddetle kullanmamanı tavsiye ederim. Öğrenmenin önüne geçtiği gibi yanlış şeylerde verip garip alışkanlıklar edinmene sebep olabilir.
 
Boş veri göndermemiş ki DateTime.Now vermiş.

LastUpdatedDate'in attribute unu yorum satırı yapıp dener misin.
1691481364147.png

Cannot insert the value NULL into column "LastUpdatedDate", table ShopDb.dbo.Urunler; Column does not allow nulls. INSERT fails.
Öncelikle hatayı okumak lazım. Hata cümlesi bize diyor ki; "NULL değer "LastUpdatedDate" sütununa eklenemez; Sütun null kabul etmiyor. INSERT başarısız."

Sonrasında public LastUpdatedDate üzerinde duran VS'in bize sunduğu muazzam eklentiye bakalım; 0 references. Bu ikisi bize SQL sorgusunda veri aktarımı sırasında LastUpdatedDate'in DB'ye gönderilmediğini gösteriyor.
1691481529515.png

Kodun devamı olmasa da ve SQL sorgusunun build edildiği yeri görmesek de buradan yola çıkarak konu sahibinin sorgusuna bu veriyi dahil etmediğini anlamak güç değil. Comment'e almaya da gerek yok.
 
Eki Görüntüle 1894244

Öncelikle hatayı okumak lazım. Hata cümlesi bize diyor ki; "NULL değer "LastUpdatedDate" sütununa eklenemez; Sütun null kabul etmiyor. INSERT başarısız."

Sonrasında public LastUpdatedDate üzerinde duran VS'in bize sunduğu muazzam eklentiye bakalım; 0 references. Bu ikisi bize SQL sorgusunda veri aktarımı sırasında LastUpdatedDate'in DB'ye gönderilmediğini gösteriyor.
Eki Görüntüle 1894246
Kodun devamı olmasa da ve SQL sorgusunun build edildiği yeri görmesek de buradan yola çıkarak konu sahibinin sorgusuna bu veriyi dahil etmediğini anlamak güç değil. Commen'te almaya da gerek yok.
Güzel dikkat etmişsin. Şahsen ben fark etmemiştim hiçbir yerde kullanılmadığını.
 
Eki Görüntüle 1894244

Öncelikle hatayı okumak lazım. Hata cümlesi bize diyor ki; "NULL değer "LastUpdatedDate" sütununa eklenemez; Sütun null kabul etmiyor. INSERT başarısız."

Sonrasında public LastUpdatedDate üzerinde duran VS'in bize sunduğu muazzam eklentiye bakalım; 0 references. Bu ikisi bize SQL sorgusunda veri aktarımı sırasında LastUpdatedDate'in DB'ye gönderilmediğini gösteriyor.
Eki Görüntüle 1894246
Kodun devamı olmasa da ve SQL sorgusunun build edildiği yeri görmesek de buradan yola çıkarak konu sahibinin sorgusuna bu veriyi dahil etmediğini anlamak güç değil. Comment'e almaya da gerek yok.
Code first kullanılıyorsa evet böyle yapılmalı. Bu arada konudan bağımsız ama blackbox ve copilot hakkında aynı şeyi düşünüyorum sizinle.
 
Ek olarak Blackbox kullandığını görüyorum. Şiddetle kullanmamanı tavsiye ederim. Öğrenmenin önüne geçtiği gibi yanlış şeylerde verip garip alışkanlıklar edinmene sebep olabilir.
Teşekkür ederim tavsiye için. Kullananlar çok iyi olduğunu söylediği için indireyim dedim. Nasıl alışkanlıklar edinilir ? araştırmayı önlemek gibi mi ?

Hocam dbcontextte o lastupdate alanını dbcontexte getdate var diye belirtmen lazım. Şu şekilde:
C#:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<EntityAdıBuraya>()
        .Property(x => x.LastUpdateDate)
        .HasDefaultValueSql("GETDATE()");
}
Tabi sql tarafında da otomatik date atayacak default value vermiş olman lazım.
Kod:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;

namespace Consoleapp
{
   public class ShopContext: DbContext
   {
      public DbSet<Product> Produts {get;set;}
      public DbSet<Category> Categories {get;set;}
      public DbSet<User> Users { get; set; }
      public DbSet<Customer> Customers { get; set; }
      public DbSet<Address> Addresses { get; set; }

      public static readonly ILoggerFactory MyLoggerFactory
         = LoggerFactory.Create(builder => { builder.AddConsole(); });

      protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
       {
         optionsBuilder
         .UseLoggerFactory(MyLoggerFactory)
         //.UseSqlite("Data Source = shop.db");
         .UseSqlServer(@"Data Source = .\SQLEXPRESS; Initial Catalog= ShopDb; Integrated Security=SSPI;");
       }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
        
            modelBuilder.Entity<User>()
                        .HasIndex(u => u.Username)
                        .IsUnique();

            modelBuilder.Entity<Product>()
                        .ToTable("Urunler");                   

            modelBuilder.Entity<Customer>()
                        .Property(p => p.IdentityNumber)
                        .HasMaxLength(11)
                        .IsRequired();

            modelBuilder.Entity<ProductCategory>()
                        .HasKey(t => new {t.ProductId, t.CategoryId});

            modelBuilder.Entity<ProductCategory>()
                        .HasOne(pc => pc.Product)
                        .WithMany(p => p.ProductCategories)
                        .HasForeignKey(pc => pc.ProductId);
      
            modelBuilder.Entity<ProductCategory>()
                        .HasOne(pc => pc.Category)
                        .WithMany(c => c.ProductCategories)
                        .HasForeignKey(pc => pc.CategoryId);
        }

 
 
   }
   // Entity Product(Id, Name, Price) => Product(Id, Name, Price)

   // one to many

   public class User
   {
      public int Id { get; set; }
      [Required]
      [MinLength(8),MaxLength(15)]

      public string Username { get; set; }
      [Column(TypeName ="varchar(20)")]

      public string Email { get; set; }

      public Customer Customer { get; set; }

      public List<Address> Addresses { get; set; } // navigation property (bu property sayesinde nesneler üzerinde gezinebiliyoruz.)


   }

   public class Customer
   {
      [Column("customer_id")]
      public int Id { get; set; }
      [Required]

      public string IdentityNumber { get; set; }
      [Required]

      public string FirstName { get; set; }
      [Required]

      public string LastName { get; set; }
      [NotMapped]

      public string FullName { get; set; }

      public User User { get; set; }

      public int UserId { get; set; }
   }

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

      public string Name { get; set; }

      public string TaxNumber { get; set; }

   }

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

      public string Fullname { get; set; }

      public string Title { get; set; }

      public string Body { get; set; }

      public User User { get; set; } // navigation property

      public int UserId { get; set; }


   }

   public class Product
   {
      // primary key (Id, <type_name>Id)

      [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
      public int Id {get;set;}

      public string Name { get; set; }

      public decimal Price { get; set; }

      [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
      public DateTime InsertedDate { get; set; } = DateTime.Now;

      [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
      public DateTime LastUpdatedDate { get; set; } = DateTime.Now;

      public List<ProductCategory> ProductCategories { get; set; }

   }

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

      public string Name { get; set; }

      public List<ProductCategory> ProductCategories { get; set; }
   }
    //[NotMapped]
    [Table("UrunKategorileri")]
 
  public class ProductCategory
  {
   public int ProductId { get; set; }

   public Product Product { get; set; }

   public int CategoryId { get; set; }

   public Category Category { get; set; }
  }

   class Program
    {
        static void Main(string[] args)
        {
         using (var db = new ShopContext())
         {
            var p = new Product()
            {
               Name = "Samsung 12",
               Price = 20000
            };
            db.Produts.Add(p);
            db.SaveChanges();
         }     

                        
       }
            
    }
 
}

Kodum bu şekilde nasıl yapmalıyım anlamadım hocam.
 
Teşekkür ederim tavsiye için. Kullananlar çok iyi olduğunu söylediği için indireyim dedim. Nasıl alışkanlıklar edinilir ? araştırmayı önlemek gibi mi ?
Araştırmayı önlemek, verdiği garip kod parçasını sürekli tekrar etmeye alışmak. Garip isimlendirme alışkanlıkları...
 

Technopat Haberler

Yeni mesajlar

Geri
Yukarı