Jump to content
  • 0
aysegul

NetCore Column Name Error

Question

Merhaba,

.NetCore projesinde ManyToMany olacak şekilde "TeacherSyllabusTable"'su oluşturdum. Ancak update-database dediğimde "Column names in each table must be unique. Column name 'TeacherID' in table 'TeacherSyllabusTables' is specified more than once." hatasını alıyorum.Ancak diğer bir çoka çok tablosunda hata oluşturmadı. 

İnternet'te Add-migration-ignoreChanges dedikten sonra update-database yapın diyor ancak o da çalışmadı.

Başka bir önerisi olan var mı?

Teşekkürler...

Share this post


Link to post
Share on other sites

5 answers to this question

Recommended Posts

  • 1

Merhabalar,

ManyToMany ilişkisinde kullandıgınız sınıfların kodlarını göndermeniz mümkün müdür? O şekilde daha yardımcı olabiliriz. Yine de hataya baktığımda büyük ihtimalle bir tabloda (coka cok ilişkiyi kurdugunuz sınıfların dönüstügü tablolarda) bir sütunun isminin tekrarlandığı durumu belirtilmiş. Belki de Teacher veya Syllabus sınıflarınıza verdiginiz miraslar sayesinde bu class'lardan bir tanesine bir hidden property gidiyor ve ilgili class EF tarafından tabloya dönüstürülürken aynı isimde iki property alıyor(hem miras aldıgı hidden property hem de kendisinin explicit property'si). Dolayısıyla bir tabloda sütun isimleri 'özgün' olması gerektiginden dolayı böyle bir hatayla karsılasıyorsunuz. Yine de dedigim gibi class kodlarınıza bakarsak daha kesin bir cözüm iletebiliriz.

Share this post


Link to post
Share on other sites
  • 1

Merhaba,

Dediklerinizi daha önce denemiştim gene olmadı. En sonunda projeyi sıfırdan aynı adımlarla tekrardan oluşturduğumda çalıştı.

ilginiz için teşekkür ederim.

Share this post


Link to post
Share on other sites
  • 0
Posted (edited)

Merhaba, classların ekran görüntülerini aşağıda paylaştım. Şimdiden teşekkür ederim.

"CoreEntity Class'ı"

image.png.41746f8b519aa0755d7926d1dfefde13.png

"SyllabusTable" class'ı

image.png.c282a10e8dd4da5fc7b7dddf2380c9e4.png

 

"Teacher" class'ı ;

image.png.d69fd087bbe1f31ad6d019f3a968f704.png

 

ManyToMany tablosu

image.png.71ef4b71abfba3e4ae46c7b6493ef218.png

 

DbContext'de ki bağlantı;

image.png.d9118492d0da1a6fd748ce131fc73876.png

 

 

 

Edited by aysegul

Share this post


Link to post
Share on other sites
  • 0

Merhaba,

Classlardaki Primery Key'i sadece CoreEntity'den miras alacak şekilde düzenledim. Yani artık tek primary key bulunuyor. Ayrıca Contact'te OnModelCreating'te ManyToMany tablolarını aşağıdaki gibi yaptım. Ancak hala tablolarda "Column names in each table must be unique. Column name 'StudentID' in table 'StudentSuccessDocuments' is specified more than once." hatası veriyor.

Nedenini bulamadım. Teşekkürler

image.thumb.png.1c6d54c0bea400c741702ea28a7bcde3.png

Share this post


Link to post
Share on other sites
  • 0

Merhabalar,

ID'leri sadece CoreEntity'den almakla iyi yapmışsınız o şu andaki sorunla ilgili olmasa da başka sorunlar çıkarırdı. Many To Many ilişkilerde eğer Class'lar arasındaki virtual property'ler dogru işlenmişse aslında Fluent API ile tekrar belirtmeden EF'ye bırakmak bunu daha saglıklı bir hale getirir(tıpkı .Net Framework'teki gibi Core platformu da bunu algılayacaktır). ManyToMany tablolarda HasKey metodundan sonra HasOne ile baslayan metotlar maalesef ilgili tekrar eden property ile ilgili bir işlem yapmayacaktır onları eski haline çevirebilirsiniz. Primary key tipleriniz Core'da Guid tipindeyse diger tüm Many to Many junction tablo olacak classlarda da Guid mi diye kontrol edebilir misiniz? Özellikle StudentSuccessDocument'da...Ayrıca DataAnnotations'ta Key ve Identity tanımlamasını silebilirsiniz. EF ID ismini gördügü anda onun primary key oldugunu anlayacak ve onu otomatik olarak identity yapacaktır. Bir de son iyileştirmeleri yaptığınızda migration'ı ve veritabanınız daha önce varsa veritabanınızı tamamen silip " add-migration initialcreate" kodunu package manager console'a yazarak bastan bir migration  yaparsanız daha sağlıklı olacaktır. Son olarak dikkatimi çeken bir şey verilen hatada belirtilen tekrarlanan property (StudentID  ve öncesindeki TeacherID'de) ID'lerdeki D büyük harfle yazılırken sizin property'lerinizde Id yani küçük d ile yazılmış. Burası cok önemli. Çünkü siz kücük harfle yazarken hatadaki property'nin büyük harfle verilmesi EF'nin bir eksiklik görüp Composite Key property'lerini kendisinin ek olarak yaratmaya çalıştığını belirtir ancak SQL incasesensitive olduğundan dolayı sizin diğer property'nizle cakısıp aynı property tekrarlıyor olrak görülüyor.

Dolayısıyla  hata şu şekilde kaynaklanıyor : Core'da tipi belli olan (GUID) bir ID'miz var. Ancak sonra baska sınıflarda ayrı bir şekilde key olarak bir baska ID int olarak belirtilmiş. En son nerede Key attribute'u verildiyse EF onu primary key olarak algılıyor. Sonra many to many icin junction (ara) tablo olacak sınıfımızda  ise Composite Key'ler tekrar GUID olarak belirtiliyor ve isimleri StudentId , TeacherId vs. olarak veriliyor. İşte tam bu noktada EF'nin kafası karısıp "ya bunlar bazı yerlerde int bazı yerlerde Guid" gibi bir mantıkla ilişkisini aldıkları class primary key eger GUID yapılmadıysa int yapıldıysa kendisi otomatik bir şekilde apayrı int propertyler acarak bunlara kendi isimlendirmesiyle TeacherID ve StudentID veriyor ama bunlar da o ara tablonun class'ının icinde Guid olan TeacherId (kücük d'ye dikkat casing Sql'de yok) ve StudentId ile cakısıp aynı property olarak görülüyor ve ilgili hatayı cıkarıyor. Dolayısıyla tiplere dikkat eder ve aynı yerde standartları korursanız sorun cözülecektir.

Yoğunluğumdan dolayı geç cevap verebildim. Sorun devam ederse lütfen tekrar iletişime geçin daha ayrıntılı bir anlatımla sorunu cözebiliriz.. Konuyu takibe alıyorum.

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...