entityframework 绑定

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了entityframework 绑定相关的知识,希望对你有一定的参考价值。

使用entityframework 来操作数据库,有一个表中有如下列sex(性别),deptid(部门编号),现在我想绑定数据表格上,要显示sex=男或女,deptid对应的部门名称,要怎么做呢。其中sex是在数据库中是没有对应的表的。1就是男,0就是女。

设:你的表名为Table1(人员表)、Table2(部门表)。
Gridview1.DataSource = context.Table1.Join(context.Table2,a=>a.deptid,a=>a.id,(a,b)=>性别=a.sex==1?"男":"女",部门名称=b.DeptName).ToList();
参考技术A 这个显示出什么值最好在界面层操作,对取出来的值进行转换就可以了。例如datagridview中的displayformat事件就是用来转换显示值与实际值的。

MVC 4 后期绑定的 DataContext 实体 LINQ 参考

【中文标题】MVC 4 后期绑定的 DataContext 实体 LINQ 参考【英文标题】:MVC 4 late-bound DataContext entity LINQ reference 【发布时间】:2012-07-09 14:23:46 【问题描述】:

长时间聆听,第一次来电。

我可能对此采取了错误的方法,所以任何帮助都会很棒。

我正在使用 C#、MVC 4、Code First、Entity Framework 4.3 和 Razor。

我正在尝试将 EF 数据类和一些方法拆分到一个单独的类项目中,以便它们通常可以被多个其他项目引用。我创建了这个简化的示例,以尽可能多地突出问题。

所以在一个课堂项目中我有:

public MyGeneric(string name)

    ID = Guid.NewGuid();
    Name = name;


public Guid ID  get; set; 
public string Name  get; set; 


public void AddThis(MyGeneric obj)

    using (var db = Activator.CreateInstance<myDbContext>())
    
        var myOthers = from mo in db.MyOther
                       where mo.OtherID == obj.ID
                       select mo;

        myOthers.ForEach(mo => db.MyOther.Add(mo));
        db.SaveChanges();
    

然后我可以在主项目中引用它,例如:

public class SampleInherit : MyGeneric

    public SampleInherit(string newName, string secName)
        : base(newName)
    
        SecName = secName;
    

    public string SecName  get; set; 


    public void DoSomething(SampleInherit obj)
    
        base.AddThis(obj);
        // do other stuff
    

我要做的是将一些类及其方法泛化(这是一个词吗?)到一个单独的副项目中。这个附带项目将提供基类(按需要的顺序):

使用 EF DbContext 创建/访问数据库, 允许添加更多属性, 提供影响基础数据的方法/程序, 更适合主项目的重命名。

现在,如果我只是将基类继承到主项目中的类中,那么除了基类引用 myDbContext 和 LINQ 语句中的实体对象引用之外,它都可以工作。

你能后期绑定 DataContext 还是我在这里把自己画到一个角落里?

为您提供的所有帮助干杯。

【问题讨论】:

【参考方案1】:

我认为您要做的是实现 IRepository 模式。基本上你想做的是创建一个包含你的实体和你的 IRepository 的类项目。从那里,您可以通过创建 Repository 类来创建 IRepository 的具体实现。您使用业务逻辑层通过 IRepository 访问存储库。并在那里进行数据访问。

public interface IRepository<T>

    IQueryable<T> Fetch();

    bool Insert(T entity);

    bool Update(T entity);

然后创建你的存储库

public class MyRepository<TContext> : IRepository<EntityType> where TContext: DbContext, new()

    private TContext context;

    public MyRepository(TContext context)
    
        this.context = context;
    

    public IQueryable<T> Fetch()
    
       return context.EntityTypes;
    

    // Insert and update logic

最后创建你的业务逻辑

public class BusinessLogic

    private IRepository<EntityType> repository;

    public BusinessLogic(IRepository<EntityType> repository)
    
        this.repository = repository;
    

    public void Add(EntityType obj)
    
      bool isNew = // check if new
      if(isNew)
      
        this.repository.Insert (obj)    
      
      else
      
        this.repository.Update(obj);
      
    

然后调用你的业务逻辑

IRepository<EntityType> repository = new MyRepository<MyDbContext>(new MyDbContext());
BusinessLogic service = new BusinessLogic(repository);

service.Add(new EntityType());

我不认为您想要数据上下文的后期绑定,出于性能考虑,最好使用泛型(与上面的示例一样)。同样使用此方法,您可以实例化一个数据上下文并将其传递给您的业务服务,以便实体框架可以跟踪您的实体,而不是为每次调用 AddThis 实例化一个新的数据上下文。加上这个模式,你可以做各种很酷的事情,比如使用像 ninject 这样的 IOC 容器为你创建这些业务服务,并使用 Mocks 为你的代码创建单元测试,而无需访问数据库(通过模拟你的存储库)。

【讨论】:

不,我指的不是存储库。我想使用 Code First 来创建数据库。后期装订可能不是正确使用的术语。我想继承数据库创建能力。

以上是关于entityframework 绑定的主要内容,如果未能解决你的问题,请参考以下文章

entityframework 绑定

实体框架/Linq to SQL:跳过和采取

Entity Framework 6 在从绑定的 DataGridView 删除时应该使用 DELETE 时使用 UPDATE

实体框架 DBContext 数据绑定问题

将实体框架对象绑定到 Datagridview C#

WPF中的自定义模型绑定[重复]