Şimdi Ara

Entity Framework Code First Null Data Error

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
15
Cevap
0
Favori
344
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Merhaba Asp.Net ile bir uygulama geliştirmeye çalışıyorum projemde entity framework code first kullandım sınıf tasarımı yaparken şöyle bir sorunla karşılaştım: userlar birbirlerini takip edebiliyor bu takipleri tutmak için userfollow isimli bir sınıf var bu sınıftada 2 adet user olması gerekiyor bunları user1 ve user2 isimli iki propda tutmayı planladım users sınıfındada bunlara karşılık 2 adet list var userfollow tipinde followers ve following isminde. OnModelCreating de fluent api ile realationları sağladım fakat bir kullanıcının takip ettiklerine erişmek istediğimde örneğin user1(takip eden) user2(takip edilen) user2 null olarak geliyor ilgili screenshootlar: onmodelcreating:http://prntscr.com/d3u7k9 , user classı:http://prntscr.com/d3u8fs , userfollow classı:http://prntscr.com/d3u8ob , ilgili db kaydı:http://prntscr.com/d3u8ug , null gelen kısım :http://prntscr.com/d3u9es







  • mantığı yanlış kurmuşsun

    UserFollow = User1 & User2

    Followers = List<UserFollow> demişsin. List<User> olarak yapman gerekiyor.
    çünkü 'kişiyi takip edenler' diyor, 'takiplik durumları' değil.

    UserFollow tablosundan LINQ sorgusuyla
    kişinin User1 olduğu girdilerde User2'leri following listesine,
    kişinin User2 olduğu girdilerde User1'leri de follower listesine atmalısın.

    Following
    from uf in UserFollows
    where uf.User1_Id == UserID
    select uf.User2_Id;

    Followers
    from uf in UserFollows
    where uf.User2_Id == UserID
    select uf.User1_Id;
  • quote:

    Orijinalden alıntı: Microsoft Specialist

    mantığı yanlış kurmuşsun

    UserFollow = User1 & User2

    Followers = List<UserFollow> demişsin. List<User> olarak yapman gerekiyor.
    çünkü 'kişiyi takip edenler' diyor, 'takiplik durumları' değil.

    UserFollow tablosundan LINQ sorgusuyla
    kişinin User1 olduğu girdilerde User2'leri following listesine,
    kişinin User2 olduğu girdilerde User1'leri de follower listesine atmalısın.

    Following
    from uf in UserFollows
    where uf.User1_Id == UserID
    select uf.User2_Id;

    Followers
    from uf in UserFollows
    where uf.User2_Id == UserID
    select uf.User1_Id;


    haklısın fakat öyle olması gerekiyor çünkü kişi takibi onayladımı onaylamadımı gibi başka bilgilerde tutuluyor orda onları kullanıyorum benim sorunum null gelmesi user2 nin onu çözmem gerek acilen deadline yaklaşıyor




  • user2'nin null olmasının nedeni anlattığım şey işte. UserFollow listesi açmışsın ama o listelerin amacı tek tek kişi depolamak. o yüzden olmuyor.

    şöyle yapabilirsin
    tek liste olur Followings<UserFollow> diye.
    UserFollows tablosundaki girdilerden User1 veya User2'nin o kişiye eşit olduğu girdileri alıp eklersin. şöyle yani

    List<UserFollow> Followings = UserFollows.Where(uf => uf.User1_Id == UserId || uf.User2_Id = UserId).ToList();

    bunu yapınca tüm relationship'ler o kişinin Followings property'sine düşmüş olur. sonra takip edilenlerle takip ettiklerini o listeden ayıklarsın.
  • quote:

    Orijinalden alıntı: Microsoft Specialist

    user2'nin null olmasının nedeni anlattığım şey işte. UserFollow listesi açmışsın ama o listelerin amacı tek tek kişi depolamak. o yüzden olmuyor.

    şöyle yapabilirsin
    tek liste olur Followings<UserFollow> diye.
    UserFollows tablosundaki girdilerden User1 veya User2'nin o kişiye eşit olduğu girdileri alıp eklersin. şöyle yani

    List<UserFollow> Followings = UserFollows.Where(uf => uf.User1_Id == UserId || uf.User2_Id = UserId).ToList();

    bunu yapınca tüm relationship'ler o kişinin Followings property'sine düşmüş olur. sonra takip edilenlerle takip ettiklerini o listeden ayıklarsın.

    Merhaba zaten oyleydi kod ben bu isi ef nin kendisinin yapmasini istiyorum kolayca navigate edebilmek icin yoksa ne anlami var 2 tane relation tanimlamanin kaldirip bi guzel linq sorgusuya cekebilirim sonucta

    < Bu ileti mobil sürüm kullanılarak atıldı >




  • hocam ne istediğini anlamadım ki ben. ya da yanlış anlattım.

    sende gördüğüm hata şu:
    her User'ın Followers ve Following listeleri var ve bunlar generic UserFollow.
    her UserFollow'da ise User1 ve User2 var. buna UserFollow yerine Relationship diyelim.

    Şimdi User'ın Followers<Relationship> listesi olursa mantıksız oluyor. çünkü followers'ın mantığına göre içeriği Kullanıcı1, kullanıcı2, kullanıcı3, kullanıcı4 ... gibi olmalı. yani listedeki her item bir User olmalı. Sen Relationship yaptığın için o Relationship'in User2'si tanımlı değil o yüzden null oluyor.
    bunu düzeltmek için ya iki listeyi de Relationship yerine User generic yapman lazım,
    ya da Followers ve Following listelerini birleştirip tek ad verip, Relationship generic bırakman lazım.
    Böylece liste şöyle bir hal alacak:
    var relationships = new List<Relationship>
    {
    new Relationship(user1, user2), //follower: user1, following: user2
    new Relationship(user1, user4), //follower: user1, following: user4
    new Relationship(user1, user5), //follower: user1, following: user5
    new Relationship(user6, user1), //follower: user6, following: user1
    new Relationship(user9, user1) //follower: user9, following: user1
    }
    sonra takip eden ve takipçileri çekmen gerektiğinde gerekli getFollowers() metodunu çağırırsın ve bu relationships listesinde, o user'ın follower veya following olarak geçtiği girdileri döndürürsün.

    bu şekilde yapınca olması gerekiyor ki zaten normalde de böyle oluyor. kullanıcı, kullanıcılar listesi, arkadaşlık, arkadaşlıklar listesi.
    senin istediğin ne tam olarak?



    < Bu mesaj bu kişi tarafından değiştirildi VatandA.Ş. -- 8 Kasım 2016; 23:43:43 >




  • quote:

    Orijinalden alıntı: Microsoft Specialist

    hocam ne istediğini anlamadım ki ben. ya da yanlış anlattım.

    sende gördüğüm hata şu:
    her User'ın Followers ve Following listeleri var ve bunlar generic UserFollow.
    her UserFollow'da ise User1 ve User2 var. buna UserFollow yerine Relationship diyelim.

    Şimdi User'ın Followers<Relationship> listesi olursa mantıksız oluyor. çünkü followers'ın mantığına göre içeriği Kullanıcı1, kullanıcı2, kullanıcı3, kullanıcı4 ... gibi olmalı. yani listedeki her item bir User olmalı. Sen Relationship yaptığın için o Relationship'in User2'si tanımlı değil o yüzden null oluyor.
    bunu düzeltmek için ya iki listeyi de Relationship yerine User generic yapman lazım,
    ya da Followers ve Following listelerini birleştirip tek ad verip, Relationship generic bırakman lazım.
    Böylece liste şöyle bir hal alacak:
    var relationships = new List<Relationship>
    {
    new Relationship(user1, user2), //follower: user1, following: user2
    new Relationship(user1, user4), //follower: user1, following: user4
    new Relationship(user1, user5), //follower: user1, following: user5
    new Relationship(user6, user1), //follower: user6, following: user1
    new Relationship(user9, user1) //follower: user9, following: user1
    }
    sonra takip eden ve takipçileri çekmen gerektiğinde gerekli getFollowers() metodunu çağırırsın ve bu relationships listesinde, o user'ın follower veya following olarak geçtiği girdileri döndürürsün.

    bu şekilde yapınca olması gerekiyor ki zaten normalde de böyle oluyor. kullanıcı, kullanıcılar listesi, arkadaşlık, arkadaşlıklar listesi.
    senin istediğin ne tam olarak?

    Şöyle izah edeyim yapmak istediğim şey followerları ve followingleri tutmaktı tek bir tabloda bu şekilde çözüm bulmaya çalıştım
    Table: UserFollow
    User1(Follower) User2(Following)

    yani buraya girilen tek bir kayıtla bu sorun çözülüyor kullanıcı tipinde değil çünkü diğer bilgilerde lazım bana örneğin follow request durumu gibi. Neyse burası böyle asıl sorunlu kısma geleyim. Bunlara erişmek için followers ve following isimli iki tane listim var seninde gördüğün üzere bunları modelbuilder ile mapliyorum (http://prnt.sc/d3u7k9 ) bu sayede currentuser.following diyince örneğin user1 alanı currentuser olan veriler dönüyor basitce veya currentuser.followers dersem aynı şekilde user2 alanı currentuser olanlar dönüyor ve takipçilere ulaşabiliyorum kolayca mapping işlemi buna yarıyor attığım ssde gördüğün üzere 2 tane mapping var.

    Sorun şurda iyi güzel erişiyorum ben bu follower ve followinglere fakat gelen veride diğer user null geliyor şöyle somutlaştıralım
    currentuser için currentuser.following dedik mesela takip ettiklerini çekmek için user1 alanı currentuser olan veriler geldi fakat bu verilerde user2 değerleri null olarak gözüküyor oysaki user2_id değerleri dolu yani aslında veri var ters şekilde yaparsakta aynısı oluyor yani currentuser.followers dedik mesela user1ler null geliyor bu sefer user1_id ler dolu olmasına rağmen onlarıda şöyle göstereyim şu db kaydı >http://prnt.sc/d3u8ug şuda null gelen örnek veri >http://prnt.sc/d3u9es gördüğün üzere veride user1_id = 1 fakat user1 null sorun bu yoksa pek hala bende çekebilirim user1=context.users.where(u=>u.id==myid) gibisinden fakat işte bunla uğraşmak istemiyorum ef çözmesi lazım bu işi ki normalde çözüyor burda aksi bi durum va onu çözmeye çalışıyorum.




  • Yapay Zeka’dan İlgili Konular
    php form into hatası
    4 ay önce açıldı
    Daha Fazla Göster
  • şimdi anladım galiba. şöyle dener misin:

    modelBuilder.Entity<UserFollow>().HasKey(n => new { n.User1_Id, n.User2_Id }); // userfollow'un key'i kullanıcıların keylerinden oluşan anonymous

    modelBuilder.Entity<UserFollow>()
    .HasRequired(n => n.User1)
    .WithMany(t => t.Following)
    .HasForeignKey(n => n.User1_Id);

    modelBuilder.Entity<UserFollow>()
    .HasRequired(n => n.User2)
    .WithMany(t => t.Followers)
    .HasForeignKey(n => n.User2_Id)
    .WillCascadeOnDelete(false);
  • quote:

    Orijinalden alıntı: Microsoft Specialist

    şimdi anladım galiba. şöyle dener misin:

    modelBuilder.Entity<UserFollow>().HasKey(n => new { n.User1_Id, n.User2_Id }); // userfollow'un key'i kullanıcıların keylerinden oluşan anonymous

    modelBuilder.Entity<UserFollow>()
    .HasRequired(n => n.User1)
    .WithMany(t => t.Following)
    .HasForeignKey(n => n.User1_Id);

    modelBuilder.Entity<UserFollow>()
    .HasRequired(n => n.User2)
    .WithMany(t => t.Followers)
    .HasForeignKey(n => n.User2_Id)
    .WillCascadeOnDelete(false);

    denedim hala devam etmekte sorun
  • 2. modelbuilder'ı şöyle değiştirmeyi dene bir de

    modelBuilder.Entity<UserFollow>()
    .HasRequired(n => n.User1)
    .WithMany(t => t.Followers)
    .HasForeignKey(n => n.User2_Id)
    .WillCascadeOnDelete(false);
  • quote:

    Orijinalden alıntı: Microsoft Specialist

    2. modelbuilder'ı şöyle değiştirmeyi dene bir de

    modelBuilder.Entity<UserFollow>()
    .HasRequired(n => n.User1)
    .WithMany(t => t.Followers)
    .HasForeignKey(n => n.User2_Id)
    .WillCascadeOnDelete(false);

    reiz o nasıl olucak user1 i user2_id ile mapliyosun karışıyor işler
  • hocam şöyle düşündüm:

    has a required user1 with many followings that has foreignkey user1_id
    has a required user1 with many followers that has foreignkey user2_id

    burada with many followings ve with many followers ifadeleri aynı user'a etki etmesi lazım.

    saçma mı cidden bana mantıklı geldi
    gece gece kafam gitti herhalde

    bir dene de sen
  • quote:

    Orijinalden alıntı: Microsoft Specialist

    hocam şöyle düşündüm:

    has a required user1 with many followings that has foreignkey user1_id
    has a required user1 with many followers that has foreignkey user2_id

    burada with many followings ve with many followers ifadeleri aynı user'a etki etmesi lazım.

    saçma mı cidden bana mantıklı geldi
    gece gece kafam gitti herhalde

    bir dene de sen

    User2_Id yi cekerken sorun yokki o geliyor zaten user2 null geliyor sorun orda instance almiyor nedense cikamadim isin icinden

    < Bu ileti mobil sürüm kullanılarak atıldı >




  • hocam şöyle dener misin bir de:

    modelBuilder.Entity<UserFollow>()
    .HasRequired(n => n.User1)
    .WithMany()
    .HasForeignKey(n => n.User1_Id);
    .WillCascadeOnDelete(false);

    modelBuilder.Entity<UserFollow>()
    .HasRequired(n => n.User2)
    .WithMany()
    .HasForeignKey(n => n.User2_Id)
    .WillCascadeOnDelete(false);



    < Bu mesaj bu kişi tarafından değiştirildi VatandA.Ş. -- 9 Kasım 2016; 2:54:6 >
  • quote:

    Orijinalden alıntı: Microsoft Specialist

    hocam şöyle dener misin bir de:

    modelBuilder.Entity<UserFollow>()
    .HasRequired(n => n.User1)
    .WithMany()
    .HasForeignKey(n => n.User1_Id);
    .WillCascadeOnDelete(false);

    modelBuilder.Entity<UserFollow>()
    .HasRequired(n => n.User2)
    .WithMany()
    .HasForeignKey(n => n.User2_Id)
    .WillCascadeOnDelete(false);

    Reiz users tablosundaki listlerle maplemedin nasil ulasicam listten veriye?

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.