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ü.

 
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.
 
LastUpdatedDate adlı bir sütunun var ve null değer kabul etmiyor. Boş veri göndermişsin oraya. Ona dikkat et.
Boş veri göndermemiş ki DateTime.Now vermiş.

LastUpdatedDate'in attribute unu yorum satırı yapıp dener misin.
 
Boş veri göndermemiş ki DateTime.Now vermiş.

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

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.

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.
 
Güzel dikkat etmişsin. Şahsen ben fark etmemiştim hiçbir yerde kullanılmadığını.
 
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 ?

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.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…