如何在asp.net web api中的ef codefirst模型中创建自定义类

时间:2012-10-27 10:36:53

标签: asp.net-mvc ef-code-first asp.net-web-api

我正在使用asp.net web api。我使用EF 4.1代码第一个模型与现有数据库。我有一个类,

public class Tab1
{
public int ID{get; set;}
public string FirstName{get; set;}
public string LastName{get; set;}
}

我创建了像dbcontext一样的

public class EFBarContext:DbContext
    {
        public DbSet<Tab1> User{ get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
            modelBuilder.Entity<Tab1>().ToTable("User");
        }
    }

首先我需要从表“User”获取所有记录,我需要根据firstname和lastname计算fullname,我需要返回数据json格式,如,

{"ID":212,"firstname":"kio","lastname":"nmk","fullname":"kionmk"}

为此我创建了一个自定义类,如

public class Tab2:Tab1
{
public fullname{get; set;}
}

然后我使用List<Tab2>返回列表但是我收到的错误如 Schema specified is not valid error 0064: Facet 'MaxLength' must not be specified for type 'mediumtext'. 我已经关注了以下帖子Class Inheritance with .NET EF4.1 + MySQL,但我无法在我的情况中弄明白。所以请指导我。

1 个答案:

答案 0 :(得分:0)

你的fullname属性是从firstname和lastname派生的,所以我不会在db中创建一个单独的表来存储它(这是你在Tab2:Tab1类中所做的)。

相反,您可以在webapi控制器中派生此字段:

using (var context = new EFBarContext())
{
    var jsonObject = context.User.Select(x => new {
        ID = x.ID,
        firstname = x.FirstName,
        lastname = x.LastName,
        fullname = string.Format("{0}{1}", x.FirstName, x.LastName),
    });
}

不需要db中单独的继承实体类。