मैं दो डीबीकॉन्टेक्स्ट में एक ही इकाई का उपयोग करता हूं।
public class ActualDbContext : DbContext
{
public DbSet<Doc> Docs { get; set; }
}
public class ArchivedDbContext : DbContext
{
public DbSet<Doc> Docs { get; set; }
}
public class Doc
{
...
}
मैं इस इकाई में एक अनदेखा फ़ील्ड कैसे जोड़ सकता हूं, लेकिन इसे DbContext से भर सकता हूं?
public class Doc
{
...
public bool IsArchived {get;set;}
}
public class ActualDbContext : DbContext
{
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Doc>(entity =>
{
entity
.Ignore(x => x.IsArchived)
.WithValue(x => false); // ??
};
}
}
public class ArchivedDbContext : DbContext
{
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Doc>(entity =>
{
entity
.Ignore(x => x.IsArchived)
.WithValue(x => true); // ??
};
}
}
डेटाबेस से डेटा पढ़ते समय, इस गुण को भरना होगा। प्रोग्राम कोड में, मैं कोड को डुप्लिकेट करने से बचना चाहता हूं। मुझे इन संस्थाओं के साथ उसी तरह काम करने की ज़रूरत है। इस संपत्ति के अपवाद के साथ। मैं यह कैसे कर सकता हूँ ?
@ali आपका मतलब कुछ ऐसा ही है ?
class MyRepo: IRepo
{
private bool _isArchived;
public MyRepo (MyContext context, bool isArchived)
{
_context = context;
_isArchived = isArchived;
}
public IQueryable<Doc> GetData (...)
{
return _mainDbContext.Docs.Where(....)
.Select (x=> new Doc
{
Id = x.Id,
IsArchived = _isArchived
});
}
}
मुझे वास्तव में यह निर्णय पसंद नहीं है।
2 जवाब
तो, आप इसके आधार वर्ग पर onmodelcreating को ओवरराइड करके ऐसा कर सकते हैं।
public class ActualDbContext : DbContext
{
public ActualDbContext (DbContextOptions<ActualDbContext > options) : base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Doc>().Ignore(t => t.IsArchived);
base.OnModelCreating(modelBuilder);
}
public DbSet<Doc> Docs { get; set; }
}
अधिक स्पष्टीकरण के लिए इस उत्तर की जाँच करें => ignoring- ए-क्लास-प्रॉपर्टी-इन-एंटिटी
शुभ दिन
एफई कोर आर्किटेक्चर के आधार पर, ऐसा करना असंभव है। मेरा सुझाव है कि डेटा लाते समय रिपोजिटरी पैटर्न का उपयोग करें और अपनी संस्थाओं के लिए डिफ़ॉल्ट मान सेट करें।
Class MyRepo: IRepo
{
private ActualDbContext _mainDbContext;
private ArchivedDbContext _archivedContext;
public MyRepo (ActualDbContext context , ArchivedDbContext archivedContext)
{
_mainDbContext = context;
_archivedContext = archivedContext;
}
public IQueryable<Doc> GetMainData (...)
{
return _mainDbContext.Docs.Where(....)
.Select (x=> new Doc
{
Id = x.Id,
IsArchived = false
});
}
public IQueryable<Doc> GetArchivedData (...)
{
return _archivedContext.Docs.Where(....)
.Select (x=> new Doc
{
Id = x.Id,
IsArchived = true
});
}
}
संबंधित सवाल
नए सवाल
c#
C # (उच्चारण "तेज देखें") Microsoft द्वारा विकसित एक उच्च स्तरीय, सांख्यिकीय रूप से टाइप किया हुआ, बहु-प्रतिमान प्रोग्रामिंग भाषा है। C # कोड आमतौर पर Microsoft के .NET परिवार के टूल और रन-टाइम को लक्षित करता है, जिसमें .NET फ्रेमवर्क, .NET कोर और Xamarin अन्य शामिल हैं। C # या C # के औपचारिक विनिर्देश में लिखे गए कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें।