/ / एएसपी.नेट एमवीसी 5 के बीच में शामिल हों, कोई प्राथमिक कुंजी नहीं - asp.net, sql-server, asp.net-mvc, इकाई-ढांचे, शामिल हों

एएसपी.नेट एमवीसी 5 के बीच में शामिल हों, कोई प्राथमिक कुंजी नहीं - asp.net, sql-server, asp.net-mvc, इकाई-ढांचे, शामिल हों

मेरे पास देखने के लिए कुछ दिलचस्प कोड है।

मेरे पास तीन टेबल हैं:

TablePK

यूज़र आईडी

TableBFKID

स्कोर

टेबल बी में 3 कॉलम हैं:

TablePK

नाम

संक्षिप्त नाम

तालिका सी में 4 कॉलम हैं:

TablePK

ScoreMin

ScoreMax

संशोधक

तो जब पूरा जुड़ा होता है तो ऐसा लगता है:

SELECT  B.ShortName
, A.Score
, C.Modifier
FROM TableA A
INNER JOIN TableB B ON a.TablePK= B.TablePK
INNER JOIN TableC C ON A.Score BETWEEN C.ScoreMin AND C.ScoreMax

परिणाम इस तरह दिखेगा:

शॉर्टनाम, स्कोर, संशोधक। पूर्व:

सीएए, 1 9, 4

अब मुझे पता है कि एक वास्तविक पीके या एफके होने पर एक इकाई फ्रेमवर्क कैसे शामिल किया जाए, या यहां तक ​​कि यदि केवल 0: 1 संबंध है।

लेकिन जब आप न तो पीके और न ही एफके होते हैं तो आप कैसे जुड़ते हैं?

उत्तर:

उत्तर № 1 के लिए 1

LINQ, LINQ से इकाइयों समेत, केवल इक्की-जॉइन का समर्थन करता है।

लेकिन आप सीधे एसक्यूएल चला सकते हैं:

var res = myContext.Database.SqlQuery<TResult>("SQL goes here", parmeters...);

और ईएफ परिणाम के कॉलम को गुणों के मानचित्र पर मैप करेगा TResult (जिसे संदर्भ के अन्य कनेक्शन की आवश्यकता है: इसे एक इकाई प्रकार होने की आवश्यकता नहीं है DbSet संदर्भ में टाइप की गई संपत्ति)।


उत्तर № 2 के लिए 1

इस मामले में मैं उनसे जुड़ने की कोशिश नहीं करता हूं, अनगिनत तालिका से चयन करने के लिए बस अपने लिनक्स में उप-चयन का उपयोग करें जहां स्कोर आपकी वांछित श्रेणियों के बीच हैं।

var results = context.TableA
.Select(a => new  {
score = a.Score, //add all needed columns
tableCs = context.TableC.Where(c => a.Score >= c.ScoreMin && a.Score <= c.ScoreMax)
});