由于我的数据库是使用德语表和列名设计的,因此实体框架的默认复数功能对我不起作用.
我已经找到了几个讨论这个问题的资源,但它们似乎都没有用.
我发现:有PluralisationService,我可以添加映射:
PluralizationService pluralizer =
PluralizationService.CreateService(CultureInfo.GetCultureInfo("en-us"));
ICustomPluralizationMapping mapping = ps as ICustomPluralizationMapping;
mapping.AddWord("Tabelle", "Tabellen");
Run Code Online (Sandbox Code Playgroud)
但下一步是什么?我试过:
EntityModelSchemaGenerator generator = new EntityModelSchemaGenerator(container);
generator.PluralizationService = pluralizer;
generator.GenerateMetadata();
Run Code Online (Sandbox Code Playgroud)
并将它们都放在我的POCO T4模板中.但它引发了以下异常:
EntityContainer'ContainerName'不是商店EntityContainer.参数名称:StoreEntityContainer
at System.Data.Entity.Design.EntityModelSchemaGenerator.Initialize(...)
at Microsoft.VisualStudio.TextTemplating ... GeneratedTextTransformation.TransformText()
entity-framework poco pluralize entity-framework-4 entity-framework-5
我有以下代码:
public List<anEntity> Get(int page, int pagesize, Func<anEntity, IComparable> orderby)
{
using (var ctx = new MyContext())
{
return ctx.anEntity.OrderBy(orderby).Skip(pagesize * page).Take(pagesize).ToList();
}
}
Run Code Online (Sandbox Code Playgroud)
当我检查我的数据库配置文件(SqlServer 2012)时,我可以看到一个可怕的全表扫描,没有任何"TOP"子句.
有趣的部分:
如果我做类似的事情,但指定具体的顺序:
return ctx.anEntity.OrderBy(x => x.aField).Skip(pagesize * page).Take(pagesize).ToList();
Run Code Online (Sandbox Code Playgroud)
该配置文件显示了一个漂亮的"TOP"条款.
我想避免使用很多方法,每个方法都有一个"orderby"的可能性.任何提示都将非常感激.
我有几个独立的对象,每个对象都有一个共同对象的列表.例如,
public class Project
{
public IEnumerable<CommentEntry<Project>> Comments{get;set;}
}
public class Sample
{
public IEnumerable<CommentEntry<Sample>> Comments{get;set;}
}
public class CommentEntry<T> where T: class
{
public int TId {get;set;}
public int CommentEntryId{get;set;}
public DateTime TimeStamp{get;set;}
public string Comment{get;set;}
}
Run Code Online (Sandbox Code Playgroud)
使用Entity Framework 5的流畅api,我想要一个用于项目和请求的CommentEntry表.所以,这是我的映射代码:
modelBuilder.Entity<CommentEntry<Project>>()
.Map(m =>
{
m.ToTable("EngineeringProjectComments");
});
modelBuilder.Entity<CommentEntry<Request>>()
.Map(m =>
{
m.ToTable("SampleRequestComments");
});
Run Code Online (Sandbox Code Playgroud)
当我尝试迁移时,遇到以下消息:
未映射CommentEntry`1 [Project]'类型.使用Ignore方法或NotMappedAttribute数据批注检查未明确排除类型.验证类型是否已定义为类,不是原始类,嵌套类还是通用类,并且不从EntityObject继承.
我可以看到我在这种情况下尝试使用泛型的明显缺陷.但是,任何人都可以建议我的数据库表结构,类代码或映射代码的替代方案,这将允许我在许多类之间共享单个泛型类型并具有独立的表吗?
我想同时转换一些表.如果一个人不成功,必须全部回滚.
像这样的东西:
ctx.Database.ExecuteSqlCommand("truncate table tb_expensesall");
ctx.Database.ExecuteSqlCommand("truncate table tb_wholesale");
ctx.Database.ExecuteSqlCommand("truncate table tb_singlesale");
ctx.Database.ExecuteSqlCommand("truncate table tb_purchase");
Run Code Online (Sandbox Code Playgroud)
但问题是,我不知道如何使用交易.
我试着这个:
using (gasstationEntities ctx = new gasstationEntities(Resources.CONS))
{
ctx.Database.Connection.Open();
DbTransaction tr = ctx.Database.Connection.BeginTransaction();
try
{
ctx.Database.ExecuteSqlCommand("truncate table tb_expensesall");
ctx.Database.ExecuteSqlCommand("truncate table tb_wholesale");
ctx.Database.ExecuteSqlCommand("truncate table tb_singlesale");
ctx.Database.ExecuteSqlCommand("truncate table tb_purchase");
//commit the transaction
tr.Commit();
new MessageWindow(this, Resources.GetString("Warn"), Resources.GetString("DeleteSuccess"));
}
catch (Exception ex)
{
//return
tr.Rollback();
}
//close
ctx.Database.Connection.Close();
}
Run Code Online (Sandbox Code Playgroud)
这里的问题: tr.Commit();
和Exception告诉我:
{System.InvalidOperationException: Connection must be valid and open to rollback transaction
Run Code Online (Sandbox Code Playgroud)
而tr.Rollback();抛出异常.例外是:
{System.InvalidOperationException: Connection must …Run Code Online (Sandbox Code Playgroud) c# mysql entity-framework entity-framework-5 visual-studio-2012
我正在使用Entity Framework 5 - Code.
我有一个数据库,我连接到已经存在一段时间了(我没有创建它).有一张叫做的桌子T_Customers.它包含所有客户的列表.它具有以下结构(仅部分显示):
Customer_id | numeric (5, 0) | auto increment | not null (not set as primary key)
FName | varchar(50) | not null
LName | varchar(50) | not null
Run Code Online (Sandbox Code Playgroud)
我的Customer班级:
public class Customer : IEntity
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的IEntity界面:
public interface IEntity
{
int Id { get; set; } …Run Code Online (Sandbox Code Playgroud) 我有一个部分课程,我想做类似以下的事情:
[MetadataType(typeof(UserMetaData))]
public partial class Person
{
public override string PrivateData
{
get
{
return customDecrypt(base.PrivateData);
}
set
{
base.PrivateData = customEncrypt(value);
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是上面的方法不起作用.
有没有办法覆盖基本实体框架类的属性,以允许自定义getter/setter?
所以,我有一个课程如下:
public class Message {
public enum MessageType {
Text = 0,
Audio = 1,
Image = 2
}
public int Uid { get; set; }
public MessageType Type { get; set; }
public String Text { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如您所见,Type字段是枚举.我将数据匹配到此类的映射定义如下:
public class MessagesMap : EntityTypeConfiguration<Message> {
public MessagesMap() {
// Primary Key
this.HasKey(t => t.Uid);
// Properties
this.Property(t => t.Text)
.HasMaxLength(1000);
// Table & Column Mappings
this.ToTable("wc_messages");
this.Property(t => t.Uid).HasColumnName("UID");
this.Property(t => t.Type).HasColumnName("Type");
this.Property(t => t.Text).HasColumnName("Text");
}
} …Run Code Online (Sandbox Code Playgroud) 是否可以映射多对多的关系而不在其中一端有导航属性?例如,我有一些小部件和一些可以为特定小部件加注星标的用户.我希望能够看到用户关注哪些小部件,但我并不真正关心所有已经为某个特定小部件加星标的用户
Widget.cs
public int Id { get; set; }
public string Name { get; set; }
Run Code Online (Sandbox Code Playgroud)
User.cs
public int Id { get; set; }
public string Username { get; set; }
public ICollection<Widget> StarredWidgets { get; set; }
Run Code Online (Sandbox Code Playgroud)
通过此设置,EF将生成从窗口小部件到用户的一对多关系.但是,它需要是多对多的.我知道我可以添加public ICollection<User> Users到Widget.cs,只是看是否有解决这个另一种方式.
我有以下两个模型和DbContext:
public class TestDbContext : DbContext
{
public IDbSet<Person> People { get; set; }
public IDbSet<Car> Cars { get; set; }
}
public class Person
{
public Person()
{
ID = Guid.NewGuid();
}
public Guid ID { get; set; }
public string Name { get; set; }
public virtual List<Car> Cars { get; set; }
}
public class Car
{
public Car()
{
ID = Guid.NewGuid();
}
public Guid ID { get; set; }
public string Name { get; set; …Run Code Online (Sandbox Code Playgroud) c# orm entity-framework relational-database entity-framework-5