gpt4 book ai didi

c# - 与 WebAPI OData v4 的一对零或一对一关系

转载 作者:太空宇宙 更新时间:2023-11-03 13:01:29 25 4
gpt4 key购买 nike

我正在使用 Entity Framework 4.3 并首先编写代码。我有两个像这样的 1 对 0 或 1 关系的表...

class User
{
[key]
public int UserID {get; set;}
// other props
}

class UserStats
{
[key]
public int UserID {get; set;}
// other props


public virtual User User {get; set;}
}

我还使用带有 OData v4 的 ASP.Net WebAPI 2.2 和 OData 客户端代码生成器模板。

WebAPI 创建的元数据文件缺少用户 UserID 属性上的 IsNullable="False" 属性。因此,OData 客户端代码生成器使 User 类的 UserID 属性可为空,这是不正确的,尤其是当它是主键时。

我已经尝试将 [Required] 添加到 UserStats 的 User 属性,但是如果我不包含 ,任何更新都会抛出验证异常>User 在保存/更新 UserStats 类时。

我觉得我错过了什么。

最佳答案

在一对一关系中,一端必须是主体,另一端是从属。 EF 要求依赖实体的 PK 也是 FK 。在 UserStats 类中的 UserID 属性上添加 ForeignKey 属性:

public class User
{
[Key]
public int UserID {get; set;}
// other props
}

public class UserStats
{
[Key, ForeignKey("User")]
public int UserID {get; set;}
// other props


public virtual User User {get; set;}
}

如果你想要那个 User 导航。属性是可选的,那么你将需要改变你的模型。首先,您需要向 UserStats 实体添加一个新的 PK 属性并将 UserID FK 属性更改为可为空:

public class User
{
[Key]
public int UserID {get; set;}
// other props
}

public class UserStats
{
[Key]
public int UserStatsID {get; set;}

[ForeignKey("User")]
public int? UserId {get;set;}
// other props
public virtual User User {get; set;}
}

但是要小心,这最后一个不是一对一的关系,实际上是一对多的,但是很多人用它来进行同一个提议。如果你使用 Fluent Api 配置最后一个关系,它会是这样的:

modelBuilder.Entity<UserStats>().HasOptional(us=>us.User).WithMany().HasForeignKey(us=>us.UserId); 

关于c# - 与 WebAPI OData v4 的一对零或一对一关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32149050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com