代码如下:
[Table("Patient")]
class Patient
{
public Patient()
{
Visits = new List<Visit>();
}
public int Id { get; set; }
public string Name { get; set; }
public DateTime BirthDate { get; set; }
public AnimalType AnimalType { get; set; }
public DateTime FirstVisit { get; set; }
public List<Visit> Visits { get; set; }
[NotMapped]
public string Extend { get; set; }
}
//----------------------------------
class VetContext : DbContext
{
public VetContext(string nameOrConnection):base(nameOrConnectionString:nameOrConnection)
{
// Database.SetInitializer<VetContext>(new DropCreateDatabaseIfModelChanges<VetContext>());
Database.SetInitializer<VetContext>(new CreateDatabaseIfNotExists<VetContext>());
}
public VetContext() { }
//还需要返回Patient类和Visit类的可查询数据集DbSets,以暴露类中的属性
public DbSet<Patient> Patients { get; set; }
}
//main-----
static void Main(string[] args)
{
CodeFirst.VetContext context = new CodeFirst.VetContext("Paients");
//CreateNewPatient();
Console.WriteLine("Completed!");
// SqlParameter param = new SqlParameter("@id", 1);
var name = context.Patients.SqlQuery("EXECUTE GetNameById @p0", "Sampson").ToList();
//var name = context.Database.SqlQuery<CodeFirst.Patient>("EXEC GetNameById Sampson");
foreach (var item in name)
{
Console.WriteLine(item.Name);
}
Console.ReadKey();
}
这里执行存储过程的时候出现异常:数据读取器与指定的Patient不兼容。某个类型“id”的成员在同名的数据读取器中没有对应列。
检查一下存储过程返回结果中是否包含id列
没有啦,存储过程里面就返回name列呢。
@涅槃子: 要加上(不仅是id),Code First是根据实体中的属性进行映射的。