【问题标题】:Getting the object returns null on the object using Entity Framework使用实体框架获取对象在对象上返回 null
【发布时间】:2019-09-18 12:46:59
【问题描述】:

我正在使用实体框架来访问 SQL Server 数据库。

我对表格行中的对象有疑问。

DB(实体代码优先):

public class User
{
    [Key]
    public int Id { get; set; }
    public Group Group_Id { get; set; }
    public string Alias { get; set; }
    public string Email { get; set; }
    public string Password { get; set; }
    public string Name { get; set; }
    public string Surname { get; set; }
    public string Company { get; set; }
}

public class SMAccount
{
    [Key]
    public int Id { get; set; }
    public User User_Id { get; set; } //there he is
    public string Type { get; set; }
    public string AId { get; set; }
}

使用(使用 Razor 查看):

var smAcc = db.SMAccounts.FirstOrDefault(x => x.User_Id.Id.Equals(userID));
if (smAcc != null)
{
    <span>FB account: </span>@smAcc.AId <br /> //return accountID
    <span>User: </span>@smAcc.User_Id          //return null :(
}

但在表格中分配了用户...

ID | type | AId | User_Id_Id
2  | fbu  | 227 | 1

如何从表中获取用户对象?

问候

【问题讨论】:

    标签: c# asp.net entity-framework code-first


    【解决方案1】:

    首先,EF 的约定将使用 ClassName_Id 查找 FK,因此,如果您是 User 的 FK,则称为 User_Id,那么这已涵盖。您可以将您的用户属性称为“用户”而不是“用户 ID”,我认为这会造成混淆,因为它暗示了用户的“ID”,而不是用户。

    public class SMAccount
    {
        [Key]
        public int Id { get; set; }
        public User User { get; set; }
        public string Type { get; set; }
        public string AId { get; set; }
    }
    

    然后在使用其用户检索帐户时,使用.Include() 告诉 EF 急切加载相关实体。

    var smAcc = db.SMAccounts.Include(x => x.User).FirstOrDefault(x => x.User.Id.Equals(userID));
    

    我不建议从 Razor 视图中执行此操作。而是调用控制器以检索可以从实体填充的简单 C# 对象。稍后您可能会发现自己遇到循环双向引用的问题,序列化程序不会迭代或抛出异常。此外,通过传递实体,您向客户端发送的数据远远超过它通常需要的数据,这向用户展示了比您在屏幕上呈现的更多的数据细节。通过选择您需要显示的数据,您可以最大限度地减少网络中的有效负载大小,让客户端调试器隐藏敏感细节,并且可以优化查询性能。

    【讨论】:

    • 哦!它的工作原理:D 错误是命名......但包括使用字符串:3 这应该看起来像这样:.Include("User")
    • 我通常不在“剃须刀”中使用 dbconnect。这里我只是做一个测试。默认会传输到控制器
    • 啊,是的,.Include(string) 变体默认可用,.Include(lambda) 需要 using 声明来公开扩展方法。 (EF6 的 System.Data.Entity,EF Core 的 Microsoft.EntityFrameworkCore)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多