< Сильный > startup.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Hosting;
using Microsoft.AspNet.Http;
using Microsoft.Extensions.DependencyInjection;

using MyQuotesApp.models;

using Microsoft.Framework.Runtime;
using Microsoft.Framework.Configuration;
using Microsoft.Data.Entity;

namespace MyQuotesApp
{
    public class Startup
    {
        public IConfiguration Configuration { get; set; }

        public Startup(IHostingEnvironment env, IApplicationEnvironment appEnv)
        {
            var configurationBuilder = new ConfigurationBuilder(appEnv.ApplicationBasePath);
            configurationBuilder.AddJsonFile("config.json");
            configurationBuilder.AddEnvironmentVariables();
            Configuration = configurationBuilder.Build();
        }

        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();

            services.AddEntityFramework()
                .AddSqlServer()
                .AddDbContext<QuotesAppContext>(options => options.UseSqlServer(Configuration["Data:ConnectionString"]));
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app)
        {
            app.UseMvc();
            app.UseDefaultFiles();
            app.UseStaticFiles();
        }

        // Entry point for the application.
        public static void Main(string[] args) => WebApplication.Run<Startup>(args);
    }
}

зависимости project.json

  "dependencies": {
    "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
    "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
    "Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
    "Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final",
    "EntityFramework.SqlServer": "7.0.0-beta5",
    "EntityFramework.Commands": "7.0.0-beta5",
    "Microsoft.Framework.Configuration.Json": "1.0.0-beta5",
    "Microsoft.Framework.Configuration.EnvironmentVariables": "1.0.0-beta5",
    "EntityFramework.Core": "7.0.0-rc1-final",
    "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final"
  },

Если я использую EntityFramework.Core v7.0.0.0-rc1-final, я получаю следующую ошибку:

У меня есть красная линия под опциями. UseSqlServer в этой строке:

.AddDbContext<QuotesAppContext>(options => options.UseSqlServer(Configuration["Data:ConnectionString"]));

Ошибка говорит:

Тип EntityOptionsBuilder определен в сборке, на которую нет ссылки. Вы должны добавить ссылку на сборку EntityFramework.Core, Version = 7.0.0.0, Culture = нейтральный, PublicKeyToken = null.

Если я использую EntityFramework.Core v7.0.0-beta5, я получаю следующую ошибку:

Красная линия под AddEntityFramework на этой строке:

services.AddEntityFramework()

Ошибка гласит:

IServiceCollection не содержит определения для AddEntityFramework, и метод расширения AddEntityFramework, принимающий первый аргумент типа IServiceCollection, не может быть найден (вам не хватает директивы using или ссылки на сборку?)

Когда я смотрю в Интернете, мне кажется, что все обучающие программы, которые я нахожу по настройке соединения, содержат строку, похожую на мою, которая вызывает эту ошибку. Возможно, это простая проблема, и мой недостаток опыта в C # мешает мне узнать очевидный ответ? Как мне подключить эту дурацкую штуку к моей базе данных SQL?

1
Tyler 18 Апр 2016 в 10:39

2 ответа

Лучший ответ

Попробуйте удалить все, что связано с EF, и просто поставьте это:

"EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final",
"EntityFramework.MicrosoftSqlServer.Design": "7.0.0-rc1-final",
"EntityFramework.Commands": "7.0.0-rc1-final",

EF должен самостоятельно решать другие зависимости ... также в конфигурации вашего пакета у вас есть разные версии, работающие для некоторых из ваших зависимостей EF, это также может быть проблемой ... рад, что смог помочь :)

3
Tyler 19 Апр 2016 в 05:08

Убедитесь, что ваши строки подключения верны. Убедитесь, что соответствующие пакеты nuget установлены правильно. После того, как ваши пакеты nuget установлены правильно и ваша строка подключения верна с правильным именем, на которое вы ссылаетесь, например <add name="DbName" connectionString="xyn" providerName="System.Data.SqlClient" /> Убедитесь, что вы ссылаетесь на свой контекст базы данных как на DbName или другое имя в строке подключения. Убедитесь, что вы правильно используете using System.Data.SqlClient;

Убедитесь, что у вас есть правильный объект конфигурации для EF, например.

  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>

Это дочерний элемент <configuration>

0
user2336660user2336660 18 Апр 2016 в 08:54