簡體   English   中英

實體框架 - 無法將值 NULL 插入列中?

[英]Entity Framework - Cannot insert the value NULL into column?

我已經查看了有關此主題的所有類似問題,但似乎沒有一個對我有用。 當我嘗試運行這兩個命令時,我不知道為什么會出現以下錯誤: add-migration然后update-database

無法將值 NULL 插入列“StudentId”、表“aspnet-JavaWebsiteProject-20171006053028.dbo.Groups”; 列不允許空值。 更新失敗。 該聲明已被終止。

我正在使用Entity Framework v6.2.0 我有以下三個簡單的模型:

public class Student
{
    public int Id { get; set; }

    public string UserId { get; set; }

    [EmailAddress]
    public string Email { get; set; }
}

教師模式:

public class Teacher
{
        public int Id { get; set; }

        public string UserId { get; set; }

        [EmailAddress]
        public string Email { get; set; }
    }

//組模型:

public class Group
{
    public int Id { get; set; }

    [Required]
    public int StudentId { get; set; }
    public Student Student { get; set; }

    [Required]
    public int TeacherId { get; set; }
    public Teacher Teacher { get; set; }
} 

任何人都可以指導我我可能做錯了什么或我如何解決這個錯誤?

謝謝

如果您希望該列可為空,則應將模型的屬性設置為可為空類型。

public int? StudentId { get; set; }

在此之后,您將不得不再次創建並運行您的遷移。

與@StefanW. 的評論相關,如果 Groups 表已經存在並且您正在向其中添加StudentId (和其他)列,如果存在現有行,那么這些行必須為每個行指定一些值新列。 如果您沒有為該列指定默認值,那么數據庫將嘗試使用NULL ,這將失敗,因為該列不允許空值。

這個問題已經存在多年了。 關於它的話題有幾十個。 在大多數主題中,答案是“在表設計中放置 IsIdentity=true 並指定 Identity start 和 step” ,或者將您的身份定義放在 SQL 中,

 CREATE TABLE ..
     [id] INT IDENTITY(1,1) NOT NULL
     ...

喜歡在

無法將值 NULL 插入到列“Id”中,實體框架

.. 對於大約 75% 的成員來說,該答案立即生效! 但是……對於 25% 來說,這似乎不是解決方案。 有一些帶有公認答案的主題,建議使用遷移命令(edmx 上下文)重新創建所涉及的表,

實體框架無法將值 NULL 插入設置為否的列標識規范

.. 但我不想重新創建我寶貴的表,所以這個過程是沒有選擇的。 今天我在這里解決了它,無需重置任何表。 原因簡單。 我的連接字符串沒有數據庫尋址,所以我實際上將我的表搭建在同一台服務器上的另一個數據庫中,其中 IDENTITY[1,1] 沒有在 Table create 中設置! 當然,在調試時我只檢查了我自己的數據庫 :) ,這是正確設置的。 但是表設計中的措施沒有效果。 當然不是。。我編輯錯了數據庫!

為了解決這個問題,我改變了我的連接字符串以包含初始目錄,從

 <add name="MyDBContext"  connectionString="Data Source=..;Persist Security Info=True;User ID=..;Password=.."  providerName="System.Data.SqlClient" />

 <add name="MyDBContext"  connectionString="Data Source=..;Persist Security Info=True;initial catalog=MyDatabase;User ID=..;Password=.."  providerName="System.Data.SqlClient" />

一個問題仍然存在……為什么 Microsoft 不要求我們在 app.config 中為 Framework 6 連接字符串設置初始目錄? 上述過程可能會在沒有通知的情況下破壞現有的其他數據庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM