我打算在下面留下我的其他答案,因爲它仍然提供有價值的信息。
這就是你如何完成從數據庫中提取數據以便顯示。您正在使用數據庫第一種方法。我會建議創建一個新的項目來測試這個並習慣正在發生的事情。現在您將要使用功能區中的工具並選擇連接到數據庫。輸入相關信息以連接到數據庫。現在創建新的項目,如果你還沒有。爲了學習目的,創建一個沒有身份驗證的Asp.Net5 Web應用程序。現在,轉到您的NuGet程序包管理器控制檯。運行「Install-Package EntityFramework.MicrosoftSqlServer -Pre」。一旦完成運行「Install-Package EntityFramework.Commands -Pre」和「Install-Package EntityFramework.MicrosoftSqlServer.Design -Pre」。安裝完成後,轉到Project.Json文件並在命令部分添加「ef」:「EntityFramework.Commands」。現在,轉到命令提示符並cd到您的項目目錄。我發現最簡單的方法是右鍵單擊您的項目並在文件資源管理器中打開文件夾。一旦你這樣做,上一層,所以你看到的只是一個文件夾。如果你看到你的項目的所有內容,那麼這不是正確的地方。 Shift +右鍵單擊該文件夾,您應該看到在此處打開命令窗口的選項。單擊它並在您的項目目錄中打開一個命令提示符。運行
dnvm使用1.0.0-RC1-UPDATE1
或我發現,不是在某些情況下工作。如果不工作,然後運行
dnvm使用1.0.0-RC1決賽
如果沒有這些工作,你需要安裝1.0.0-RC1。一旦這些工作之一,運行
DNX EF的DbContext支架 「服務器= EnterYourConnectionStringHere;數據庫= YourDataBaseNameHere; Trusted_Connection = TRUE;」 EntityFramework.MicrosoftSqlServer --outputDir模型
一旦完成,你應該從車型目錄數據庫中創建您的模型。轉到模型目錄中新創建的上下文類。一旦在那裏,你會看到一個覆蓋無效的OnConfiguring方法。刪除那個。打開你的Startup.cs並將這些使用語句放在頂部。
using YourProject.Models;
using Microsoft.Data.Entity;
現在在Startup.cs您ConfigureServices方法添加
var connection [email protected]"Server=YourConnectionString;Database=YourDatabaseName;Trusted_Connection=True;";
services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<YourContextName>(options => options.UseSqlServer(connection));
然後剩下的只是爲您創造新註冊的情況下的控制器和視圖。
老回答以下
嘗試使用流利的API來指定的關係。像這樣:(提示:這是在你的ApplicationDbContext中。)
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<DataSensor>()
.HasMany(p => p.Data)
.WithOne();
}
public DbSet<DataSensor> DataSensor { get; set; }
public DbSet<GatheredData> GatheredData { get; set; }
而且你的類是這樣的:
public class DataSensor
{
public int Id { get; set; }
public int DataNodeId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public bool active;
public bool alarm;
public virtual ICollection<DataSensor> Data { get; set; }
}
public class GatheredData
{
public int Id { get; set; }
public int DataSensorId { get; set; }
public DateTime Time { get; set; }
public float value { get; set; }
[ForeignKey("DataSensorId")]
public virtual DataSensor datasensor { get; set; }
}
你也可以做到這一點按照慣例這樣
public class DataSensor
{
public int Id { get; set; }
public int DataNodeId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public bool active;
public bool alarm;
public virtual ICollection<DataSensor> Data { get; set; }
}
public class GatheredData
{
public int Id { get; set; }
public int DataSensorId { get; set; }
public DateTime Time { get; set; }
public float value { get; set; }
public virtual DataSensor datasensor { get; set; }
}
或數據註解這樣
public class DataSensor
{
public int Id { get; set; }
public int DataNodeId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public bool active;
public bool alarm;
public virtual ICollection<DataSensor> Data { get; set; }
}
public class GatheredData
{
public int Id { get; set; }
public int DataSensorId { get; set; }
public DateTime Time { get; set; }
public float value { get; set; }
[ForeignKey("DataSensorId")]
public virtual DataSensor datasensor { get; set; }
}
如果你按照慣例做到這一點它不起作用,數據註釋可以幫助映射它們。如果一切都失敗了,流利的API將覆蓋所有內容並映射關係。
現在,如何顯示這些數據。如果你只是想顯示數據而不編輯它,那麼我認爲創建一個局部視圖將是你最好的選擇。在您的共享文件夾中創建一個空白視圖。將您的模型添加到新視圖。
@model IEnumerable<DataVisualization.Models.GatheredData>
然後做一個foreach循環遍歷數據。
@foreach (var item in Model)
{
<p>@Html.DisplayFor(modelItem => item.Id)</p>
<p>@Html.DisplayFor(modelItem => item.Time)</p>
<p>@Html.DisplayFor(modelItem => item.Value)</p>
}
然後回到您的數據傳感器主視圖中,將以下數據放在您想要的位置。
@Html.Partial("StringNameOfThePartialView", Model.Data)
第一過載是部分視圖的名稱,並且第二個是模型數據被傳遞到該視圖。
謝謝,但我不認爲有需要的API。我只是想創造一個非常普通的關係。就像用戶可以做很多事務一樣,這些事務映射到數據庫中的用戶。 – Madmenyo
如果你已經擁有一個你正在使用的數據庫,我想你可能會以這種錯誤的方式進行。如果你所要做的只是從數據庫中提取數據並顯示值,那麼有一種更簡單的方法可以做到這一點。讓我知道如果這是你想要做的,我會相應地改變我的答案。 –
是的,我想要的只是從一個位置拉出所有傳感器,並獲取屬於該傳感器的所有數據。數據和所有傳感器信息/細節存儲在數據庫中。 – Madmenyo