c# - Entity Framework 6 Creating an single related record -


i using entity framework on project involving tv series. data loaded loading episode files. when create episode should find series belongs , use 1 or else create new one.

i using "episodefactory" create episodes , works until save , creates new series each episode.

i looking for:

  • series : id = 01, name = 'gotham'
  • episode : id = 21, name = 'gothams01e01', series = 01
  • episode : id = 22, name = 'gothams01e02', series = 01

what getting:

  • series : id = 01, name = 'gotham'
  • series : id = 02, name = 'gotham'
  • series : id = 03, name = 'gotham'
  • episode : id = 21, name = 'gothams01e01', series = 02
  • episode : id = 22, name = 'gothams01e02', series = 03

here unittest this:

    [test]     public void shouldloadseriesifoneexists()     {         const string testdirectory = testcontstants.testdir + @"\shouldloadseriesifoneexists";         var episodefactory = new episodefactory();         var randomseriesname = guid.newguid().tostring();         var testepisodea = episodefactory.createnewepisode(testdirectory + @"\" + randomseriesname + @"s01e01.avi");         var testepisodeb = episodefactory.createnewepisode(testdirectory + @"\" + randomseriesname + @"s02e03.avi");          using (var dbcontext = new mediamodeldbcontext())         {             dbcontext.episodes.add(testepisodea);             dbcontext.episodes.add(testepisodeb);             dbcontext.savechanges();              assert.that(dbcontext.series.count(s => s.seriesname == randomseriesname), is.equalto(1));              dbcontext.series.remove(testepisodea.series);         }     } 

the episodefactory file name , extracts episode information file.

the series fetched with:

    public series getseriesbyseriesname(string seriesname)     {         using (var dbcontext = new mediamodeldbcontext())         {             if (dbcontext.series.any())             {                 var matchingseries = dbcontext.series.firstordefault(series => series.seriesname == seriesname);                 if (matchingseries != null) return matchingseries;             }              var seriesbyshowname = new series(){seriesname = seriesname};             dbcontext.series.add(seriesbyshowname);             dbcontext.savechanges();             return seriesbyshowname;         }     } 

and relevant model:

public class episode {     [databasegenerated(databasegeneratedoption.identity), key]     public virtual int episodeid { get; set; }     public virtual series series { get; set; }      // ...  }  public class series {     [databasegenerated(databasegeneratedoption.identity), key]     public int seriesid { get; set; }     public string seriesname { get; set; }     public observablecollection<episode> episodes { get; set; }      public series()     {     }      // ... } 

are sharing same dbcontext instance in test , factory? if not problem using difererent dbcontext instances in factory method , in test.

if use different dbcontext instances entity framework not able kwnow series object exist in database, series become deattached object dbcontest instance in test (google deattached entity framework)

you have share same dbcontext instance across test , factory, or work series deatthaced object.


Comments

Popular posts from this blog

Magento/PHP - Get phones on all members in a customer group -

php - .htaccess mod_rewrite for dynamic url which has domain names -

Website Login Issue developed in magento -