6

मैं आरआईए सेवाओं का उपयोग करके चांदी के प्रकाश में इकाई फ्रेमवर्क 5 के लिए कोड फर्स्ट का उपयोग करके एक नई परियोजना स्थापित करने पर काम कर रहा हूं। मैंने कुछ मुद्दों के कारण एक परीक्षण परियोजना बनाई है और नीचे दिए गए कोड को पोस्ट करेंगे।ईएफ 5 कोड फर्स्ट और आरआईए सर्विसेज सिल्वरलाइट "ऑब्जेक्ट रेफरेंस ऑब्जेक्ट के उदाहरण पर सेट नहीं है" त्रुटि निर्माण क्लाइंट

अर्थात्, मुझे किसी ऑब्जेक्ट संदर्भ को किसी ऑब्जेक्ट के उदाहरण पर सेट नहीं किया जाता है, जब भी मैं Silverlight क्लाइंट प्रोजेक्ट बनाने का प्रयास करता हूं जो क्लाइंट प्रॉक्सी क्लासेस उत्पन्न करना चाहिए।

बस स्पष्ट होने के लिए, यह त्रुटि एप्लिकेशन चलाने या डिबग करने के दौरान नहीं है, लेकिन इसे बनाते समय।

मैंने अलग किया है कि यह तब होता है जब मेरे पास मेरे कोड प्रथम कक्षाओं पर परिभाषित कोई नेविगेशन गुण/विदेशी कुंजी हो।

आज रात किसी भी मदद की सराहना की जाएगी।

public class Person 
{ 
    public int PersonId { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public DateTime? BirthDate { get; set; } 

    public virtual List<Character> Characters { get; set; } 
} 

public class Character 
{ 
    public int CharacterId { get; set; } 
    public int PersonId { get; set; } 
    public virtual Person Person { get; set; } 
    public string CharacterName { get; set; } 
} 

public class CharacterDbContext : DbContext 
{ 
    public DbSet<Person> Persons { get; set; } 
    public DbSet<Character> Characters { get; set; } 

    public CharacterDbContext() 
    { 
     if (HttpContext.Current == null) 
     { 
      Database.SetInitializer<CharacterDbContext>(null); 
     } 
    } 
} 

[EnableClientAccess] 
public class CharacterDbService : DbDomainService<CharacterDbContext> 
{ 
    #region Basic Methods for Person with the context property of Persons 

    [Query] 
    public IQueryable<Person> GetPersons() 
    { 
     return DbContext.Persons; 
    } 

    [Insert] 
    public void InsertPerson(Person entity) 
    { 
     DbEntityEntry<Person> entityEntry = DbContext.Entry(entity); 
     if (entityEntry.State != EntityState.Detached) 
     { 
      entityEntry.State = EntityState.Added; 
     } 
     else 
     { 
      DbContext.Persons.Add(entity); 
     } 
    } 

    [Update] 
    public void UpdatePerson(Person entity) 
    { 
     DbContext.Persons.AttachAsModified(entity, ChangeSet.GetOriginal(entity), DbContext); 
    } 

    [Delete] 
    public void DeletePerson(Person entity) 
    { 
     DbEntityEntry<Person> entityEntry = DbContext.Entry(entity); 
     if (entityEntry.State != EntityState.Deleted) 
     { 
      entityEntry.State = EntityState.Deleted; 
     } 
     else 
     { 
      DbContext.Persons.Attach(entity); 
      DbContext.Persons.Remove(entity); 
     } 
    } 

    #endregion 

    #region Basic Methods for Character with the context property of Characters 

    [Query] 
    public IQueryable<Character> GetCharacters() 
    { 
     return DbContext.Characters; 
    } 

    [Insert] 
    public void InsertCharacter(Character entity) 
    { 
     DbEntityEntry<Character> entityEntry = DbContext.Entry(entity); 
     if (entityEntry.State != EntityState.Detached) 
     { 
      entityEntry.State = EntityState.Added; 
     } 
     else 
     { 
      DbContext.Characters.Add(entity); 
     } 
    } 

    [Update] 
    public void UpdateCharacter(Character entity) 
    { 
     DbContext.Characters.AttachAsModified(entity, ChangeSet.GetOriginal(entity), DbContext); 
    } 

    [Delete] 
    public void DeleteCharacter(Character entity) 
    { 
     DbEntityEntry<Character> entityEntry = DbContext.Entry(entity); 
     if (entityEntry.State != EntityState.Deleted) 
     { 
      entityEntry.State = EntityState.Deleted; 
     } 
     else 
     { 
      DbContext.Characters.Attach(entity); 
      DbContext.Characters.Remove(entity); 
     } 
    } 

    #endregion 
} 
+0

क्या परियोजना परेशानी, चांदी की रोशनी परियोजना या डी ईएफ परियोजना का कारण बन रही है? क्या आप यह भी सत्यापित कर सकते हैं कि आप किसी भी फाइल को याद नहीं कर रहे हैं और एसएल आपके डब्ल्यूसीएफ आरआईए सेवाओं के लिंक के बिना निर्माण करता है –

+0

@ रिककोस यह एसएल प्रोजेक्ट था, और अगर मैं सभी रिश्तों को अपनी इकाई के रूप में हटा देता हूं तो यह ठीक हो गया। नीचे आंशिक समाधान देखें। यह टूलकिट में टेक्स्ट टेम्पलेट का उपयोग करने से संबंधित मुद्दों का संयोजन था जो मैंने पहले से ही किए गए अन्य समाधानों के साथ विलय कर दिया था। – KitKat

उत्तर

6

आपका विदेशी कुंजी फ़ील्ड मैप नहीं कर रहे हैं, इस तरह वे छद्म कोड जनरेटर (संकलन के दौरान आपके प्रॉक्सी का निर्माण करने के लिए बुलाया कोड का टुकड़ा) से व्याख्या नहीं की जा सकती।
आप आप में क्या रखना चाहिए कुछ DbContext

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
     modelBuilder.Entity<Character>() 
      .HasRequired(x=> x.Person) 
      .WithMany(x=> x.Characters) 
      .HasForeignKey(x=> x.PersonId); 
} 
भी

की तरह, मैं तुम्हें अपने
public virtual List<Character> Characters { get; set; }

public virtual ICollection<Character> Characters { get; set; } को बदलने के लिए सुझाव देते हैं, क्योंकि मुझे यकीन है कि नहीं कर रहा हूँ अगर प्रॉक्सी जनरेटर (और एफई भी) उस सूची को सही तरीके से मैप करेगा।
संपादित करें:
मुझे लगता है कि ईएफ मेटाडाटाप्रोवाइडर विवरण में सही विशेषता की आपूर्ति नहीं कर रहा है।
Character.CharacterId और Person.PersonID पर एक KeyAttribute रखो, भी, Character.Person

[Association("Character_Person", "PersonId", "PersonId", IsForeignKey = true)] 

से अधिक इस लाइन को जोड़ने और Person.Characters पर इस एक

Association("Character_Person", "PersonId", "PersonId")]<br> 

संपादित करें:
किटकैट के साथ चैट करने के बाद हमें अंततः समस्या मिली। प्रॉक्सी पीढ़ी के दौरान असेंबली को कॉल करें। गेट एक्सपोर्टेड टाइप्स ने शिकायत की है कि उसे ईएफ 4.1 की आवश्यकता है। खदान से इस link वहाँ के ब्लॉग पोस्ट में बेहतर EF5 कोड पहले और WCF रिया सेवाएं

के साथ सौदा करने का तरीका बताता है कि: सरल संबंधित config में

<runtime> 
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
    <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" /> 
    </dependentAssembly> 
</assemblyBinding> 

डाल किया चाल

नोट

+0

आपकी प्रतिक्रिया के लिए बहुत बहुत धन्यवाद, हालांकि मुझे अभी भी वही परिणाम मिल रहा है। मैं अपने वास्तविक प्रोजेक्ट में उन चरणों के माध्यम से रहा था और अपनी पोस्ट पढ़ने तक उन्हें परीक्षण में पुनः प्रयास नहीं किया था। मेरी समझ यह थी कि ईएफ ने नामकरण सम्मेलन उठाए। लेकिन रिश्ते को स्पष्ट रूप से परिभाषित करने के बाद भी मुझे एक ही त्रुटि मिलती है। कोई विचार? – KitKat

+0

@ किटकैट आपका स्वागत है। एमएमएम मुझे लगता है कि आपका ईएफ 5 मेटाडाटैप्रोवाइडर आवश्यक एसोसिएशन एट्रिब्यूट नहीं डाल रहा है। मैं अपना उत्तर – mCasamento

+0

संपादित करने जा रहा हूं मैंने इसे भी आजमाया। अभी भी कोई नहीं है। ऑब्जेक्ट ब्राउज़र में माइक्रोसॉफ्ट असेंबली की जांच करना, अगर मैं आरआईए सेवा पहले कोड का समर्थन करता हूं तो मैं नवीनतम संस्करण नहीं सोचता। मुझे इसे पाने के लिए एक थर्ड पार्टी Nu Get पैकेज डाउनलोड करना पड़ा। WCFRIA.EntityFramework – KitKat