为什么我需要在Entity Framework Core关系中传递模型类而不是id

问题描述 投票:0回答:1

假设我在 .NET 中有一个名为“B”的模型类,它与模型类“A”具有必需的 fk(一对一关系)。

模型的代码应该是这样的:

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

    public virtual required B ClassB { get; set; }
}

public class B
{
   public int Id { get; set; }
   public int A_ID { get; set; }

    public virtual required A ClassB { get; set; }
}

现在,假设我在表“A”中有一条 id 为“1”的记录,并且我想在类“B”中添加一条记录,该记录的 fk 为 1。

在我看来,这段代码应该足够了:

var classBToAdd = new B
{
   A_ID = 1
}

_myRepo.Add(classBToAdd);

但我不能这样做,因为需要关系:

public virtual required A ClassB { get; set; }

如果不需要,我会收到以下警告:

不可空变量在退出构造函数时必须包含非空值。考虑将其声明为可为空。

为什么我需要指定完整的对象?在某些情况下,这可能意味着我需要执行大型查询才能保存完整的对象。

c# .net database entity-framework-core relationship
1个回答
0
投票

public int A_ID { get;放; } 在您的代码中,不会自动识别外键。正确的代码是:

public int AId { get; set; }

如果需要 B 类对象尚不存在,如何先创建 A 类对象(获取其引用 Id)?

此代码有效:

public class A
{
    public int Id { get; set; }
    public virtual B ClassB { get; set; }
}

public class B
{
    public int Id { get; set; }
    public int AId { get; set; }
    public virtual A ClassA { get; set; }
}

...在你的 Main() 中:

A newClassA = new A();                                    
db.Add(newClassA);
db.SaveChanges();
            
B classBToAdd = new B
{
    AId = newClassA.Id
};

db.Add(classBToAdd);
db.SaveChanges();
© www.soinside.com 2019 - 2024. All rights reserved.