2015-05-27 5 views
7

मैं अपने डेटाबेस, BUNTS है, जो इस्पातइकाई की रूपरेखा अमान्य फ़ील्ड नाम

CREATE TABLE BUNTS (
    BUNTCODE   INTEGER NOT NULL, 
    BUNTNAME   VARCHAR(20), 
    BUNTSTEEL  INTEGER, 
    ...... 
); 

और POLL_WEIGHT_BUNTS है, जो आपरेशन कि प्रत्येक पर प्रदर्शन किया गया था बारे में जानकारी शामिल के टुकड़े बारे में जानकारी शामिल में दो तालिकाओं है बंट

का सुझाव
CREATE TABLE POLL_WEIGHT_BUNTS (
    PWBCODE   INTEGER NOT NULL, 
    PWBBUNTCODE  INTEGER, 
    PWBDEPARTMENTFROM INTEGER, 
    PWBDEPARTMENTTO INTEGER 
    .... 
); 

संबंध एक-से-कई है। मैंने उन तालिकाओं को मॉडल में मैप किया। सब ठीक काम किया। हाल ही में मैं मेज बंटों जो पिछले आपरेशन कि बंट पर प्रदर्शन किया गया था करने के लिए संदर्भ होता करने के लिए एक क्षेत्र को जोड़ने के लिए तय कर लिया है:

BUNTLASTOPER  INTEGER 

अब अपने मॉडल इस तरह दिखेगा:

[Table("BUNTS")] 
public class Bunt 
{ 
    [Key] 
    [Column("BUNTCODE")] 
    public int? Code { set; get; } 
    [Column("BUNTNAME")] 
    public string Name { set; get; } 
    [Column("BUNTSTEEL")] 
    public int? SteelCode { set; get; } 
    [Column("BUNTLASTOPER")] 
    public int? LastOperationID { set; get; } 
    [ForeignKey("LastOperationID")] 
    public BuntOperation LastOperation { set; get; } 
    public virtual ICollection<BuntOperation> Operations { set; get; } 
} 

[Table("POLL_WEIGHT_BUNTS")] 
public class BuntOperation 
{ 
    [Key] 
    [Column("PWBCODE")] 
    public int? Code { set; get; } 
    [Column("PWBBUNTCODE")] 
    public int? BuntCode { set; get; } 
    [ForeignKey("BuntCode")] 
    public Bunt Bunt { set; get; } 
    [Column("PWBDEPARTMENTFROM")] 
    public int? DepartmentFromCode { set; get; } 
    ..... 
} 

मैं के बाद 'यह करने के बाद, जब मैं इस

return _context.Operations; 

यह नया गलत क्षेत्र Bunt_Code

के साथ एक एसक्यूएल बयान उत्पन्न करता है की तरह संचालन क्वेरी करने के लिए कोशिश
SELECT 
"B"."PWBCODE" AS "PWBCODE", 
"B"."PWBBUNTCODE" AS "PWBBUNTCODE", 
"B"."PWBDEPARTMENTFROM" AS "PWBDEPARTMENTFROM", 
.... 
"B"."Bunt_Code" AS "Bunt_Code" 
FROM "POLL_WEIGHT_BUNTS" AS "B" 

मुझे लगता है कि अब ईएफ BUNTS तालिका के लिए एक विदेशी कुंजी है, और इसे नहीं ढूंढ सकता है। तो यह Bunt_Code फ़ील्ड उत्पन्न करता है, जो मेरे डेटाबेस में अनुपलब्ध है। लेकिन मेरे पास पहले से BuntBuntOperation वर्ग में एक संपत्ति है, जो BUNTS तालिका का संदर्भ है। मैं क्या खो रहा हूँ?


अद्यतन इस तरह लगता है मेरी समस्या का हल

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Bunt>().HasOptional(b => b.LastOperation).WithMany(); 
    modelBuilder.Entity<Bunt>().HasMany(b => b.Operations).WithRequired(op => op.Bunt); 
} 
+0

इसके बजाय' मैं तुम्हें लगता है कि शायद 'एफके के वास्तविक कॉलम नाम को संदर्भित करने के लिए' [विदेशीकी ("PWBBUNTCODE")] करने के लिए किया जाना चाहिए, लेकिन मैंने थोड़ी देर में ईएफ नहीं किया है, इसलिए गलत हो सकता है। – AaronLS

+0

एफडब्ल्यूआईडब्ल्यू, आप 'ऑर्डर 'कॉलम को' बंटऑपरेशन 'में जोड़ने पर विचार करना चाहेंगे। यह आपको अनुक्रम में इन्हें पुनर्प्राप्त करने की क्षमता देता है (और आवश्यक होने पर बाद की तारीख में पुन: क्रमबद्ध), और अंतिम ऑपरेशन का चयन करना अंतिम [क्रमबद्ध] प्रविष्टि को चुनना आसान हो जाता है। (आपको अपने यूओडब्ल्यू में 'लास्टऑपरेशन' अपडेट करने की भी चिंता करने की आवश्यकता नहीं होगी।) –

+0

असल में मैंने ऑर्डर कॉलम जोड़ा था, हालांकि तालिका पेड़ की तरह है, पिछले ऑपरेशन का संदर्भ देता है। लेकिन 'आखिरी सहयोग' क्षेत्र का उद्देश्य तेजी से जानकारी प्राप्त करना है कि स्टील का एक टुकड़ा कहां और किस राज्य में है। 'बाएं शामिल' और यह है कि, ऑर्डर द्वारा क्रमबद्ध करने और शीर्ष 1 रिकॉर्ड – Pallaris

उत्तर

0

लगता है यह मेरा समस्या हल की तरह `[ForeignKey (" BuntCode ")] के

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Bunt>().HasOptional(b => b.LastOperation).WithMany(); 
    modelBuilder.Entity<Bunt>().HasMany(b => b.Operations).WithRequired(op => op.Bunt); 
} 
संबंधित मुद्दे