【问题标题】:Entityframework 6 : How to map custom types to SQL tablesEntityframework 6:如何将自定义类型映射到 SQL 表
【发布时间】:2020-01-01 19:30:16
【问题描述】:

我搜索了有关此主题的主题,但没有一个回答我的问题。

这是我的问题:

我正在使用 EF 6 Base-first。我需要用 SQL 表映射我自己创建的自定义实体。 假设我有一个这样的 SQL 表客户端:

CREATE TABLE CLIENT(
id int primary key,
info1 varchar,
info2 varchar,
info3 varchar,
info4 varchar,
info5 varchar);

和一个 C# 类的客户端

public class Client{
 private int id {get; set;}
 private string info2 {get; set;}
 private string info5 {get; set;}
}

我希望能够像操作自动生成的 EDMX 类一样在 DbContext 中操作此 Client 类。通过这样做,我只会操纵我的应用程序需要的字段。 我的目标是能够像那样使用它

using(var ctxt = new CustomDbContext())
{
     ctxt.Entry(client).State = client.id == 0? EntityState.Added : EntityState.Modified;

    context.SaveChanges();
}

这样我就可以在我的 Client 表中插入/更新条目,而不会破坏我不使用的 info1、info3 和 info4 中的数据。

提前致谢

【问题讨论】:

  • 作为只有私有属性的类?无论如何,如果您不映射其他属性,则可以,即从设计器中的类中删除它们。但是,这只有在未映射的列可以为空时才有可能,否则您将永远无法插入数据。

标签: c# .net orm entity-framework-6 mapping


【解决方案1】:

如果我理解得很好,那么我会使用 DbEntityEntry。 我希望这个资源可以帮助您了解它的实际工作原理。

http://kerryritter.com/updating-or-replacing-entities-in-entity-framework-6/

玩得开心

【讨论】:

【解决方案2】:

所以我认为你应该创建一些继承自 DbContext 的类来设置你的上下文,然后你将像 DbSet<T> MyProperty {get;set;} 一样在该类上创建一个虚拟属性

所以可能是这样的:

public class YourEntity : DbContext
{
    //Configuration stuff for your entity
    ...

    public virtual DbSet<Client> Clients {get;set;}
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2013-04-25
  • 1970-01-01
  • 1970-01-01
  • 2021-11-20
  • 1970-01-01
  • 1970-01-01
  • 2011-03-05
  • 2021-09-01
相关资源
最近更新 更多