Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework EF-INSERT语句与外键约束冲突_Entity Framework - Fatal编程技术网

Entity framework EF-INSERT语句与外键约束冲突

Entity framework EF-INSERT语句与外键约束冲突,entity-framework,Entity Framework,我理解这个错误,问题是如何告诉EF在UserSettings之前插入用户记录 我正在尝试设置一个1对1关系,其中用户表可以不带UserSettings而存在,但是UserSettings只能在有用户的情况下存在。为了做到这一点,我将UserSettings表设置为主键也是外键;也许这是个糟糕的设计,想法?以下是两个表的创建脚本: CREATE TABLE [dbo].[Users] ( [Userid] UNIQUEIDENTIFIER NOT NULL PRIMARY KEY,

我理解这个错误,问题是如何告诉EF在UserSettings之前插入用户记录

我正在尝试设置一个1对1关系,其中用户表可以不带UserSettings而存在,但是UserSettings只能在有用户的情况下存在。为了做到这一点,我将UserSettings表设置为主键也是外键;也许这是个糟糕的设计,想法?以下是两个表的创建脚本:

CREATE TABLE [dbo].[Users]
(
    [Userid] UNIQUEIDENTIFIER NOT NULL PRIMARY KEY, 
    [UserName] NVARCHAR(MAX) NOT NULL, 
    CONSTRAINT [PK_Users] PRIMARY KEY ([Userid])
)
下面是UserSettings表:

CREATE TABLE [dbo].[UserSettings]
(
    [UserId] [uniqueidentifier] NOT NULL,
    [SettingOne] [bit] NOT NULL,
    [SettingTwo] [bit] NOT NULL,
    [SettingThree] [bit] NOT NULL, 
    CONSTRAINT [PK_UserSettings] PRIMARY KEY ([UserId]), 
    CONSTRAINT [FK_UserSettings_Users] FOREIGN KEY ([UserId]) REFERENCES [Users]([UserId]),
)
以下是我的实体的设置方式:

public class User
{
    [Key]
    public Guid UserId { get; set; }
    public string UserName { get; set; }
    [ForeignKey("UserId")]
    public UserSetting UserSetting { get; set; }
}

public class UserSetting
{
    [Key]
    public Guid UserId { get; set; }
    public bool SettingOne { get; set; }
    public bool SettingTwo { get; set; }
    public bool SettingThree { get; set; }
}
当我运行以下命令时:

static void Main(string[] args)
{

    using (var db = new SandBoxContext())
    {
        var userId = Guid.NewGuid();
        db.Users.Add(new User()
        {
            UserId = userId,
            UserName = "Bob",
            UserSetting = new UserSetting()
            {
                UserId = userId,
                SettingOne = true,
                SettingTwo = false,
                SettingThree = true
            }
        });

        db.SaveChanges();
    }

    Console.ReadKey();
}
db.SaveChanges()引发以下异常:

SqlException: The INSERT statement conflicted with the FOREIGN KEY constraint "FK_UserSettings_Users". The conflict occurred in database "SandBox", table "dbo.Users", column 'UserId'.

我刚找到答案

我必须将UserSettings类更改为:

public class UserSetting
{
    [Key, ForeignKey("User")]
    public Guid UserId { get; set; }
    public bool SettingOne { get; set; }
    public bool SettingTwo { get; set; }
    public bool SettingThree { get; set; }

    public virtual User User { get; set; }
}
包括ForeignKey属性和导航属性解决了这个问题