c# - 当行具有空值时, Entity Framework 返回空对象

标签 c# linq entity-framework-4.3

我有一个现有数据库(我无法以任何方式修改),我想使用 EF 对其进行编码。表之间没有主键、外键或实际关系 - 一切似乎都是由使用数据库的应用程序处理的。对于大多数表/实体来说,这都是微不足道的。然而,我有一门课,就像下面的一门课(简化的),我正在努力解决。

[Table("tableName")]
public class MyClass
{
    [Key]
    [Column("id")]
    public int? Id { get; set; }

    [Column("name")]
    public string CompanyName { get; set; }

    [Column("address")]
    public string Address { get; set; }
}

类似 _context.MyClasses.Where(x => x.Address == "something") 工作正常。但是,似乎当数据库中的 id 列为 NULL 时,我会得到一个空对象 - 即使 CompanyName 和 Address 有值。我需要这些值,无论 id (或其他)是否为空。有没有办法强制 EF 生成对象并忽略空列?

删除或移动 [Key] 属性会给我一个异常(exception),例如“必须有一个键列”(并且 Id 列还用于将其他类的集合映射到此类(如果有匹配的类))。

更新 不要将 Id 列视为实际标识符。它基本上只是一个带有愚蠢名称的整数。

最佳答案

如果 KeyAttribute 在数据库中可为空,则不能将其放置在 Id 属性之上。这就是给你带来问题的原因......

主键不能为空,但我想你知道......

关于c# - 当行具有空值时, Entity Framework 返回空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11359147/

相关文章:

c# - 在 Settings.settings 中保存属性

c# - 这个科学计数法在 C# 中的正则表达式如何?

linq - 这个 PredicateBuilder 类是如何工作的?

c# - DbSet.FirstOrDefault()?

c# - 使用 MS SQL 服务器在 SQL 查询中给表友好名称

c# - Linqify 这个 : Aggregate a subset of a list

c# - LINQ 和 Enumerable.Where<TSource>(IEnumerable<TSource>, Func<TSource, Int32, Boolean>) 重载方法

c# - 在查询中预先加载的动态包含语句 - EF 4.3.1

c# - 如何在具有多个分支的项目中管理迁移?

c# - 如何绕过 "Internal .NET Framework Data Provider error 1025."?