使用实体框架代码优先时无法连接到数据库

本文关键字:连接 数据库 实体 框架 代码 | 更新日期: 2023-09-27 18:13:13


我写了一个非常简单的类,即perfom数据访问
它检查表中是否存在当天的行,并更新或创建新行

public class DataAccessClass
{
    public static DayWeather GetDayWeather(DateTime date)
    {
        try
        {
            using (var db = new Context())
            {
                var query =
                    (from day in db.DayWeather
                     where ((DateTime)day.DateOfDay).Date == date.Date
                     select new DayWeather((short)day.Temperature, (ushort)day.WindSpeed, (ushort)day.Pressure, (ushort)day.Humidity, day.Cloudiness, day.TypeRecip, (DateTime)day.DateOfDay)).First();
                return query;
            }
        }
        catch (Exception exp)
        {
            if (!EventLog.SourceExists("DataAccessSource"))
            {
                EventLog.CreateEventSource("DataAccessSource", "DataAccessErrorLog");
            }
            EventLog.WriteEntry("DataAccessSource", exp.Message);
            throw new Exception("Problem with data get.");
        }
    }
    public static void SaveDayWeather(DayWeather day)
    {
        try
        {
            using (var db = new Context())
            {
                var existingDay =
                  (from d in db.DayWeather
                   where ((DateTime)day.DateOfDay).Date == day.DateOfDay.Date
                   select d).SingleOrDefault<DayWeather>();
                if (existingDay != null)
                {
                    existingDay.Temperature = day.Temperature;
                    existingDay.WindSpeed = day.WindSpeed;
                    existingDay.Pressure = day.Pressure;
                    existingDay.Humidity = day.Humidity;
                    existingDay.Cloudiness = day.Cloudiness;
                    existingDay.TypeRecip = day.TypeRecip;
                    db.SaveChanges();
                }
                else
                {
                    DayWeather newDay = new DayWeather();
                    newDay.DateOfDay = day.DateOfDay;
                    newDay.Temperature = day.Temperature;
                    newDay.WindSpeed = day.WindSpeed;
                    newDay.Pressure = day.Pressure;
                    newDay.Humidity = day.Humidity;
                    newDay.Cloudiness = day.Cloudiness;
                    newDay.TypeRecip = day.TypeRecip;
                    db.DayWeather.Add(newDay);
                    db.SaveChanges();
                }
            }
        }

它使用EF生成数据库。Contex类和保存类如下:

public class DayWeather
{
    public short Temperature { get; set; }
    public ushort WindSpeed { get; set; }
    public ushort Pressure { get; set; }
    public ushort Humidity { get; set; }
    public string Cloudiness { get; set; }
    public string TypeRecip { get; set; }
    public DateTime DateOfDay { get; set; }
    public DayWeather(short Temperature, ushort WindSpeed, ushort Pressure, ushort Humidity, string Cloudiness, string TypeRecip, DateTime Date)
    {
        this.Temperature = Temperature;
        this.WindSpeed = WindSpeed;
        this.Pressure = Pressure;
        this.Humidity = Humidity;
        this.Cloudiness = Cloudiness;
        this.TypeRecip = TypeRecip;
        this.DateOfDay = Date;
    }
    public DayWeather()
    {
    }
}
internal class Context : DbContext
{
    public DbSet<DayWeather> DayWeather { get; set; }
}

我用这个代码来调用这些方法:

DataAccessClass.SaveDayWeather(new DayWeather(12, 12, 12, 12, "Yes", "rain", DateTime.Now));
        DayWeather day = DataAccessClass.GetDayWeather(DateTime.Now);
        Console.WriteLine(day.ToString());
        Console.ReadKey();


它应该生成新的数据库,但出现错误。在消息中,它写入了无法连接到SQL Server的内容。

有人知道出了什么问题吗?
附言:对不起我英语不好。
P.P.S.我通过NuGet添加了EF。

使用实体框架代码优先时无法连接到数据库

您可以手动指定连接字符串,如下

using (var db = new Context("connectionString"))

默认构造函数在web.config中查找与派生上下文类Context同名的连接字符串。

如果找不到,则默认为

Data Source=.'SQLEXPRESS;

Data Source=(LocalDb)'v11.0;

这取决于您使用的sql server的版本。