के कॉलम में मैप किए गए एंटिटी रीड-ओनली प्रॉपर्टी में मुझे हल करने में दिलचस्प समस्या है, लेकिन हालांकि, आम है, ऐसा लगता है कि यह एंटिटी फ्रेमवर्क के साथ आसानी से प्राप्त नहीं किया जा सकता है। दो टेबल हैं:इकाई फ्रेमवर्क - संबंधित तालिका
Player(Id,TeamId,FirstName,LastName)
Team(Id, Name, IsProfessional)
प्लेयर केवल एक टीम से संबंधित हो सकता है। का उपयोग करते हुए टीपीटी (DB पहले), हम दो वर्गों उन तालिकाओं को मैप किया है
public class Player
{
public int Id{get;set;}
public int TeamId{get;set;}
public string FirstName{get; set;}
public string LastName{get; set;}
public Team Team{get;set;}
}
public class Team
{
public int Id{get; set;}
public string Name{get;set;}
public bool IsProfessional{get;set;}
public IEnumerable<Player> Players{get;}
}
मैं प्राप्त करने के लिए चाहते हैं क्या प्लेयर इकाई पर संपत्ति IsProfessional है:
public class Player
{
public int Id{get;set;}
public int TeamId{get;set;}
public string FirstName{get; set;}
public string LastName{get; set;}
public Team Team{get;set;}
**public bool IsProfessional{get;}** should be read-only
}
यह मानचित्रण कॉन्फ़िगर करने के लिए संभव है कि रास्ता क्या व्यावसायिक संपत्ति linq प्रश्नों में इस्तेमाल किया जा सकता है?
var result= db.Players.Where(p=>p.IsProfessional==true);
और उस क्षेत्र आबादी वाले हर बार प्लेयर इकाई materialized है के लिए?
- इकाई विभाजन:
Player pl = db.Players.Where(p=>p.FirstName="Lionel").FirstOrDefault(); if(pl.IsProfessional) { //do something... }
पहले से ही साथ की कोशिश की। संभव नहीं है क्योंकि मैं टीम मैपिंग रखना चाहता हूं और क्योंकि रिश्ते 1: 1 नहीं है)
- मैपिंग प्लेयर इकाई को डीबी व्यू पर मैप करना। इसे पसंद नहीं आया क्योंकि अन्य संबंध हैं प्लेयर इकाई की मुझे आवश्यकता है। मुझे पता है कि उन्हें मैन्युअल रूप से बनाना संभव है, लेकिन डेटाबेस से edmx को अद्यतन करना ssdl को रीसेट करेगा।
धन्यवाद
समाधान
गर्ट अर्नोल्ड जवाब में दूसरा विकल्प, समाधान है कि मेरी जरूरतों फिट बैठता है के आधार पर इस प्रकार है:
मैं समारोह
GetIsProfessional
बनाने (पड़ा ऐसा करें क्योंकि गणना किए गए फ़ील्ड सामान्य रूप से केवल अपने टेबल फ़ील्ड से ही किए जा सकते हैं)CREATE FUNCTION [dbo].[GetIsProfessional](@teamId as INT) RETURNS bit BEGIN DECLARE @isProfi AS bit SELECT @isProfi = IsProfessional FROM Teams WHERE Id = @teamId RETURN @isProfi END
मैं
Player
मेज पर गणना क्षेत्र बनायाALTER TABLE Players ADD [IsProfessional] AS dbo.GetIsProfessional(TeamId)
मैं db पहले दृष्टिकोण का उपयोग कर रहा हूँ के रूप में, मैं सिर्फ डेटाबेस से मॉडल को अद्यतन करने और है कि, यह मुझे लगता है कि मैदान पर क्वेरी कर सकता है और यह पूर्व आबादी वाले है जब प्लेयर ऑब्जेक्ट भौतिक हो जाता है।
तो 'प्लेयर.इस्प्रोफेशनल' को 'प्लेयर.इम.इज प्रोफेशनल' के समान परिणाम देना चाहिए? ईएफ वर्तमान में उन गुणों का समर्थन नहीं करता है जो एक साधारण डेटाबेस फ़ील्ड को मैप नहीं करते हैं, क्षमा करें, लेकिन शायद कोई एक अच्छा विकल्प के साथ जवाब देगा। – hvd
प्लेयर को छोड़कर मुझे वही चाहिए जो कि आवश्यक है। व्यावसायिक व्यवसाय केवल पढ़ा जाना चाहिए। मेरे द्वारा खोजे जाने वाले सभी विकल्प वास्तव में अच्छे नहीं हैं। –