这个能实现么?
//now it is this
var g = db.Goods_1.First();
//i want this
var g=db.Goods(ownerid).First();
-------------------------我是分割线----下边的思路可行?------------------------------------
//修改T4模板,生成goods类做为基类
//goods_1:goods
//goods_2:goods
public virtual DbSet<Goods> Goods(int ownerId) {
var nm = ownerId / 10000 + 1;
var className = string.Format("Goods_{0}", nm);
//load type goods_1
Type tp = LoadType(className);
Type dbSetTp = typeof(DbSet<>).MakeGenericType(tp);
return System.Activator.CreateInstance(dbSetTp) as DbSet<Goods>;
}
对于这种情况,你可以考虑自己解析Expression。
在配置映射关系时可以指定表名:
modelBuilder.Entity<Good>().ToTable("表名");
可以考虑通过你的DbContext的构造函数参数传递表名。
你这是CodeFirst吧,DbFirst也能这样?
@程小王: 是Code First
public virtual DbSet<Goods> Goods(int ownerId) {
var nm = ownerId / 10000 + 1;
var className = string.Format("Goods_{0}", nm);
//load type goods_1
Type tp = LoadType(className);
Type dbSetTp = typeof(DbSet<>).MakeGenericType(tp);
return System.Activator.CreateInstance(dbSetTp) as DbSet<Goods>;
}
请问楼主这个问题现在解决了没,我现在也遇到了同样的困惑,能否给我解答一下
没有,用dapper搞了
楼主 请问下这个问题你解决了么? 能共享下解决方案么?
没有
我正好也遇到同样的问题,我是这样解决的:直接使用SQL语句,代码类似下面这样,SQL中的表名(goods_1000)你可以根据需要进行动态的生成!
using (var dbContext = new PubDbContext()) { var begParam = new System.Data.SqlClient.SqlParameter { ParameterName = "@beg", Value = beg }; var endParam = new System.Data.SqlClient.SqlParameter { ParameterName = "@end", Value = end }; var temList = dbContext.goods.SqlQuery("select * from goods_1000 where cretattime>=@beg and cretattime<=@end order by cretattime desc" , begParam, endParam).ToList(); return temList; }
希望上面的代码能帮助到你~
http://entityframework.codeplex.com/wikipage?title=Public%20Mapping%20API
[Table("MyTable")]
public class Entity
{
public int Id { get; set; }
public string Description { get; set; }
}
官网的例子, 约定优于配置, 所以不要想配置文件的事情了
这位是正解。