8

क्या मॉडल बिल्डर के बिना केवल डेटा एनोटेशन का उपयोग करके एंटीटी फ्रेमवर्क 4.1 (कोड फर्स्ट दृष्टिकोण) में कई से अधिक रिश्तों को परिभाषित करना संभव है?इकाई फ्रेमवर्क 4.1 कोड पहले - डेटा एनोटेशन का उपयोग करके कई से अधिक परिभाषित करें

उदाहरण के लिए, कुछ की तरह:

Product = { Id, Name, ... } 
Category = { Id, Name, ... } 
ProductCategory = { ProductId, CategoryId } 

आप चित्र प्राप्त।

मैं दो कई करने के लिए लोगों के साथ संदर्भ में एक मध्यवर्ती इकाई ProductCategory के लिए के बाद से मैं किसी भी अतिरिक्त डेटा, सिर्फ दो FKS की जरूरत नहीं है नहीं करना चाहती। साथ ही, मैं मौजूदा डेटाबेस के उपयोग के लिए इंटरमीडिएट टेबल के लिए टेबल नाम को परिभाषित करने में सक्षम होना चाहिए।

उत्तर

11

डिफ़ॉल्ट सम्मेलनों या डेटा एनोटेशन के साथ कई लोगों को परिभाषित करना संभव है लेकिन मॉडल निर्माता के बिना जंक्शन तालिका (तालिका का नाम और कॉलम) में मानचित्रण को बदलना संभव नहीं है। सरल कई-से-अनेक:

public class Product 
{ 
    public int Id { get; set; } 
    public virtual ICollection<Category> Categories { get; set; } 
} 

public class Category 
{ 
    public int Id { get; set; } 
    public virtual ICollection<Product> Products { get; set; } 
} 

टिप्पणियों का उपयोग करने के लिए आप उपयोग कर सकते हैं:

public class Product 
{ 
    [Key] 
    public int Id { get; set; } 
    [InverseProperty("Products")] 
    public virtual ICollection<Category> Categories { get; set; } 
} 

public class Category 
{ 
    [Key] 
    public int Id { get; set; } 
    [InverseProperty("Categories")] 
    public virtual ICollection<Product> Products { get; set; } 
} 

आप मौजूदा डेटाबेस से आप modelBuilder जरूरत जंक्शन तालिका की मैपिंग को नियंत्रित करने की जरूरत है। डेटा एनोटेशन धाराप्रवाह एपीआई जितना शक्तिशाली नहीं है।

+0

धन्यवाद, मैंने सुझाव दिया जैसा आपने सुझाव दिया लेकिन यह अभी भी काम नहीं करता है। किसी कारण से मुझे 'अपवाद' अमान्य कॉलम नाम 'Category_आईडी' प्राप्त होता है। \ R \ n अनदेखा कॉलम नाम 'Product_Id''' जब मैं 'product.Categories' का मूल्यांकन करने का प्रयास करता हूं। यह केवल सम्मेलन का उपयोग कर रहा है, यानी कोई एनोटेशन या धाराप्रवाह एपीआई नहीं। मेरी डेटाबेस तालिका 'ProductsCategories' के बीच अंडरस्कोर के बिना' ProductId' और 'Category आईडी 'है। अंडरस्कोर क्यों? यह एक सम्मेलन AFAIK के रूप में कहीं भी दस्तावेज नहीं है। ईएफ 4.1 को 1-एम और एम -1 संबंधों के लिए अंडरस्कोर की आवश्यकता नहीं है (कम से कम यह दस्तावेज नहीं है)। –

+0

उत्पाद_आईडी और श्रेणी_आईडी डिफ़ॉल्ट नाम हैं। यदि आपके पास मौजूदा डेटाबेस है और आपके पास अलग-अलग नाम हैं तो आपको अपनी खुद की तालिका के संबंध में सही तरीके से मानचित्र बनाने के लिए मॉडल निर्माता का उपयोग करना होगा। –

+0

आप सही हैं। हालांकि, कहीं और जहां 1-एम संबंधों का उपयोग किया जाता है, यह एफके फ़ील्ड * बिना * अंडरस्कोर (यानी 'उत्पाद आईडी') की अपेक्षा करता है। इसका कोई अर्थ नही बन रहा है**। असल में, इसका मतलब है कि यदि मैं बाद में उत्पाद श्रेणियों मध्यवर्ती तालिका (उदाहरण के लिए "ऑर्ड") में एक और फ़ील्ड जोड़ता हूं तो यह एक वास्तविक इकाई बन जाएगा, और फिर सम्मेलन शिकायत करेगा कि उसे "ProductId" फ़ील्ड नहीं मिल रहा है। –

संबंधित मुद्दे