尝试先使用实体框架代码更新数据库

蒙克里夫

我正在尝试使用实体框架更新数据库条目。实体如下:

public partial class Test
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid identity { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
    public TestRef Colour { get; set; }
}

public class TestRef
{
    public int id { get; set; }
    public string favColor { get; set; }
}

并且在相关Controller中编辑ActionResult如下:

public ActionResult Edit([Bind(Include = "identity,Name,Age,Colour")] Test test)
{
    if (ModelState.IsValid)
    {
        test.Colour = db.TestRefs.Find(test.Colour.id);
        db.Tests.Attach(test);
        db.Entry(test).State = EntityState.Modified;
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    return View(test);
}

因此,在这里,Edit似乎适用于Test中除Color以外的所有属性(因为所有其他属性均已更新,但是Color保持了以前的状态,没有任何更改)。我以为这是因为它是一个关联,但是我无法一辈子找出原因。

隆隆

首先,告诉EFTestRef有一个密钥:

public class TestRef
{
    [Key] /* <--- */
    /*[DatabaseGenerated( ??? )] Does value generated by database? */
    public int id { get; set; }
    public string favColor { get; set; }
}

其次,以引用作为外键:

public partial class Test
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid identity { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }

    [ForeignKey("TestRefID")]  /* <--- */
    public TestRef Colour { get; set; }
}

TestRefID上面代码中的名称仅是示例。在数据库中放入FK列的名称。您的数据库中确实有FK列用于此关系,不是吗?

另外,如果您需要延迟加载,请设置Colourproperty virtual

...
    [ForeignKey("TestRefID")]
    public virtual TestRef Colour { get; set; }
...

EF将创建direved类型,并且对于所有虚拟引用属性,它将实现延迟加载逻辑。这是默认行为,直到您在数据库上下文设置中将其禁用为止:

yourDataContext.ContextOptions.LazyLoadingEnabled = false;

顺便说一句,使用GUID作为主键不是一个好主意。看看这里的缺点和优点。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用现有数据库的实体框架代码优先迁移策略

来自分类Dev

在并发数据库更新时锁定实体框架代码

来自分类Dev

使用实体框架代码优先迁移添加数据库触发器

来自分类Dev

实体框架代码优先使用本地数据库,但是在部署到Azure时出错

来自分类Dev

如何使用实体框架数据库首先自动生成的代码中的接口

来自分类Dev

首先为实体框架代码运行LocalDB数据库

来自分类Dev

实体框架代码优先库和数据库更新的含义

来自分类Dev

身份实体框架库-更新数据库[MySQL]

来自分类Dev

是否可以将数据库优先模型和代码优先模型与实体框架混合使用?

来自分类Dev

如何使用实体框架代码优先方法正确创建数据库

来自分类Dev

如何使用实体框架从DataGrid更新数据库

来自分类Dev

实体框架无法更新数据库

来自分类Dev

实体框架代码优先迁移总是尝试创建新数据库

来自分类Dev

如何更新实体框架7迁移和数据库-代码优先

来自分类Dev

尝试先使用实体框架代码更新数据库

来自分类Dev

无法使用实体框架代码优先的凭据创建数据库?

来自分类Dev

实体框架数据库更新

来自分类Dev

使用DTO实体框架,如何更新数据库?

来自分类Dev

在实体框架中使用数据库优先实体和代码优先实体

来自分类Dev

使用实体框架的导航属性更新数据库

来自分类Dev

代码优先实体框架未保存到数据库

来自分类Dev

如何先使用代码在不进行迁移的情况下在实体框架中应用数据库架构更改

来自分类Dev

MySql数据库中的实体框架代码优先迁移

来自分类Dev

实体框架代码优先定义数据库名称

来自分类Dev

将代码优先实体框架指向创建的数据库

来自分类Dev

Automapper,实体框架更新数据库

来自分类Dev

实体框架更新数据库

来自分类Dev

尝试实体框架代码优先;用法与数据库优先有什么不同吗?

来自分类Dev

使用实体框架核心更新数据库中的列

Related 相关文章

  1. 1

    使用现有数据库的实体框架代码优先迁移策略

  2. 2

    在并发数据库更新时锁定实体框架代码

  3. 3

    使用实体框架代码优先迁移添加数据库触发器

  4. 4

    实体框架代码优先使用本地数据库,但是在部署到Azure时出错

  5. 5

    如何使用实体框架数据库首先自动生成的代码中的接口

  6. 6

    首先为实体框架代码运行LocalDB数据库

  7. 7

    实体框架代码优先库和数据库更新的含义

  8. 8

    身份实体框架库-更新数据库[MySQL]

  9. 9

    是否可以将数据库优先模型和代码优先模型与实体框架混合使用?

  10. 10

    如何使用实体框架代码优先方法正确创建数据库

  11. 11

    如何使用实体框架从DataGrid更新数据库

  12. 12

    实体框架无法更新数据库

  13. 13

    实体框架代码优先迁移总是尝试创建新数据库

  14. 14

    如何更新实体框架7迁移和数据库-代码优先

  15. 15

    尝试先使用实体框架代码更新数据库

  16. 16

    无法使用实体框架代码优先的凭据创建数据库?

  17. 17

    实体框架数据库更新

  18. 18

    使用DTO实体框架,如何更新数据库?

  19. 19

    在实体框架中使用数据库优先实体和代码优先实体

  20. 20

    使用实体框架的导航属性更新数据库

  21. 21

    代码优先实体框架未保存到数据库

  22. 22

    如何先使用代码在不进行迁移的情况下在实体框架中应用数据库架构更改

  23. 23

    MySql数据库中的实体框架代码优先迁移

  24. 24

    实体框架代码优先定义数据库名称

  25. 25

    将代码优先实体框架指向创建的数据库

  26. 26

    Automapper,实体框架更新数据库

  27. 27

    实体框架更新数据库

  28. 28

    尝试实体框架代码优先;用法与数据库优先有什么不同吗?

  29. 29

    使用实体框架核心更新数据库中的列

热门标签

归档