protected override void Seed(SeedingDataFromCSV.Domain.LocationContext context) { Assembly assembly = Assembly.GetExecutingAssembly(); string resourceName = "SeedingDataFromCSV.Domain.SeedData.countries.csv"; using (Stream stream = assembly.GetManifestResourceStream(resourceName)) { using (StreamReader reader = new StreamReader(stream, Encoding.UTF8)) { CsvReader csvReader = new CsvReader(reader); csvReader.Configuration.WillThrowOnMissingField = false; var countries = csvReader.GetRecords<Country>().ToArray(); context.Countries.AddOrUpdate(c => c.Code, countries); } } resourceName = "SeedingDataFromCSV.Domain.SeedData.provincestates.csv"; using (Stream stream = assembly.GetManifestResourceStream(resourceName)) { using (StreamReader reader = new StreamReader(stream, Encoding.UTF8)) { CsvReader csvReader = new CsvReader(reader); csvReader.Configuration.WillThrowOnMissingField = false; while (csvReader.Read()) { var provinceState = csvReader.GetRecord<ProvinceState>(); var countryCode = csvReader.GetField<string>("CountryCode"); provinceState.Country = context.Countries.Local.Single(c => c.Code == countryCode); context.ProvinceStates.AddOrUpdate(p => p.Code, provinceState); } } } }
یک کتابخانه مرتبط: EntityFramework.Seeder
Generally speaking, I don't worry much about tweaking my LINQ queries when working with Entity Framework (this is also true when I'm working with SQL directly, by the way). I'm always telling my clients that if they want to speed up their data access they should look at their database design and, especially, how they're using indexes.