scorpionsx
Hectopat
- Katılım
- 20 Mayıs 2022
- Mesajlar
- 96
Daha fazla
- Cinsiyet
- Kadın
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<EntityAdıBuraya>()
.Property(x => x.LastUpdateDate)
.HasDefaultValueSql("GETDATE()");
}
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.LastUpdatedTable 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 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.
Ö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."Cannot insert the value NULL into column "LastUpdatedDate", table ShopDb.dbo.Urunler; Column does not allow nulls. INSERT fails.
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. Commen'te 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.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.
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 ?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.
Hocam dbcontextte o lastupdate alanını dbcontexte getdate var diye belirtmen lazım. Şu şekilde:
Tabi sql tarafında da otomatik date atayacak default value vermiş olman lazım.C#:protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<EntityAdıBuraya>() .Property(x => x.LastUpdateDate) .HasDefaultValueSql("GETDATE()"); }
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();
}
}
}
}
Araştırmayı önlemek, verdiği garip kod parçasını sürekli tekrar etmeye alışmak. Garip isimlendirme alışkanlıkları...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 ?