अपडेट करें (EF Core 3.x):
अभी भी EntityTypeBuilder
प्राप्त करने का कोई सार्वजनिक तरीका नहीं है , लेकिन कम से कम कंस्ट्रक्टर तर्क को IMutableEntityType
. के रूप में संशोधित किया गया है टाइप करें, इसलिए केवल
using Microsoft.EntityFrameworkCore.Metadata.Builders;
जरूरत है, और संबंधित कोड अब है
var entityTypeBuilder = new EntityTypeBuilder(entityType);
मूल (EF Core 2.x):
समस्या यह है कि ClrType
स्वामित्व वाली इकाई प्रकार की पहचान करने के लिए पर्याप्त नहीं है, इसलिए modelBuilder.Entity(Type)
EntityTypeBuilder
. प्राप्त करने के लिए उपयोग नहीं किया जा सकता है इकाई गुणों को धाराप्रवाह रूप से कॉन्फ़िगर करने के लिए आवश्यक उदाहरण।
ऐसा लगता है कि कोई अच्छा सार्वजनिक नहीं है ऐसा करने का तरीका EF Core 2.x में है, इसलिए मैं केवल सुझाव दे सकता हूं कि कुछ EF Core आंतरिक का उपयोग करें। (सामान्य आंतरिक उपयोग चेतावनी के तहत सौभाग्य से सार्वजनिक रूप से सुलभ)।
आपको निम्न की आवश्यकता होगी using
रों:
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
पहला EntityTypeBuilder
. के लिए है वर्ग, दूसरा AsEntityType()
. के लिए है एक्सटेंशन विधि जो आपको IEntityType
. को लागू करने वाले आंतरिक वर्ग तक पहुंच प्रदान करती है , और विशेष रूप से Builder
संपत्ति।
संशोधित कोड इस तरह दिखता है:
var entityTypes = modelBuilder.Model.GetEntityTypes()
.ToList();
foreach (var entityType in entityTypes)
{
var properties = entityType
.GetProperties()
.ToList();
// (1)
var entityTypeBuilder = new EntityTypeBuilder(entityType.AsEntityType().Builder);
foreach (var property in properties)
{
if (property.PropertyInfo == null)
{
continue;
}
if (property.PropertyInfo.PropertyType.IsBoolean())
{
entityTypeBuilder // (2)
.Property(property.Name)
.HasConversion(new BoolToZeroOneConverter<short>())
.HasColumnType("tinyint(1)");
}
}
}