我是初学者,我有 3 个实体:会员、帖子、评论。一个会员有很多帖子,一个帖子有很多评论。
public class Member
{
[Key]
public int Id{get;set;}
public string Name{get;set;}
public virtual ICollection<Post> Posts { get; set; }
}
public class Post
{
[Key]
public int PostId{get;set;}
public string Subject{get;set;}
public int AccountId{get;set;}
public virtual Member member{get;set;}
public ICollection<Comment> Comments { get; set; }
}
public class Comment
{
[Key]
public int CommentId{get;set;}
public string Body{get;set;}
public int PostId { get; set; }
public virtual Post post { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是在我的上下文中定义的关系:
modelBuilder.Entity<Post>()
.HasRequired(c=>c.member)
.WithMany(t=>t.Posts) …Run Code Online (Sandbox Code Playgroud) 此代码生成运行时错误:
struct MyStruct {
public int ID;
public string Desc;
}
...
var q = db.MyTable.Select(t => new MyStruct { ID = t.ID, Desc = t.Desc });
Run Code Online (Sandbox Code Playgroud)
发生错误是因为结构没有无参数构造函数.但我不能使用显式构造函数,因为没有SQL转换.
我的第一个问题是为什么这不会产生编译时错误 - 编译器知道这MyStruct是一个结构,并且我不能在这个不存在的无参数构造函数上使用对象初始化器.
但更重要的问题是,这是Linq2Entities的一个已知限制,你必须使用类而不是结构?
鉴于:
public EntityAddress ReadSingle(Func<EntityAddress, bool> predicate)
{
//var result = Context.CV3Address.FirstOrDefault(a => a.GUID == 1100222);
var result = Context.CV3Address.FirstOrDefault(predicate);
return result;
}
Run Code Online (Sandbox Code Playgroud)
FirstOrDefault(a => a.GUID == 1100222); 立即返回结果.
FirstOrDefault(predicate);导致超时异常.请注意谓词= lambda表达式
我怀疑是后一种方法试图拉下所有记录,这些记录不会发生在这么大的一张桌子上.
为什么会这样?
我写一个asp.net应用mvc4和我使用实体框架5.我的每一个实体都像场EnteredBy,EnteredOn,LastModifiedBy和LastModifiedOn。
我正在尝试使用该SavingChanges事件自动保存它们。下面的代码是从众多博客、SO 答案等中汇总的。
public partial class myEntities : DbContext
{
public myEntities()
{
var ctx = ((IObjectContextAdapter)this).ObjectContext;
ctx.SavingChanges += new EventHandler(context_SavingChanges);
}
private void context_SavingChanges(object sender, EventArgs e)
{
ChangeTracker.DetectChanges();
foreach (ObjectStateEntry entry in
((ObjectContext)sender).ObjectStateManager
.GetObjectStateEntries
(EntityState.Added | EntityState.Modified))
{
if (!entry.IsRelationship)
{
CurrentValueRecord entryValues = entry.CurrentValues;
if (entryValues.GetOrdinal("LastModifiedBy") > 0)
{
HttpContext currContext = HttpContext.Current;
string userName = "";
DateTime now = DateTime.Now;
if (currContext.User.Identity.IsAuthenticated)
{
if (currContext.Session["userId"] != …Run Code Online (Sandbox Code Playgroud) 我使用的 EF5 有一个由字符串、日期、可为空日期和整数组成的 20 个大型属性实体。是否可以使用 Linq 对每个字段执行包含操作。
我不想为每个字段构建 linq 语句
results = list.Where(house => house.Date1.ToString().Contains(search)||
house.Address1.Contains(search)||
house.Address2.Contains(search)||
house.Address3.Contains(search)||
.........................)
Run Code Online (Sandbox Code Playgroud)
我想我想将所有属性转换为字符串(如有必要),然后对每个属性进行包含?理想情况下,这将发生在数据库级别。
我想我无法连接它们,因为如果两个字段的结束和开始创建了搜索文本,可能会导致错误匹配?有任何想法吗?
我目前是这个LINQ string[] 针对多个字段的第二个答案,使用 LinqKit AsExpandable 和 EF 将函数转换为基于类型的字符串。但是我似乎找不到将 DateTime 转换为字符串的 SqlFunction
因此,我正在编写一个应用程序,该应用程序需要在运行时选择一个实体并通过实体框架进行添加,然后将其保存到数据库中,我已经通过使用ADO.NET实体数据模型创建了数据库和基于该模型的模型,使用反射类,根据运行时添加的数据选择保存数据的对象,如下所示;
mytype = Type.GetType(objName);
myObject = Activator.CreateInstance(mytype);
Run Code Online (Sandbox Code Playgroud)
我如何做这样的事情来选择要使用的实体,我可以做这样的事情吗:
db.[MyEntity].Add(myObject);
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
谢谢
是否可以更改 EF6 中的实体列表状态
List<AuditTrail> auditLogs = new List<AuditTrail>();
auditLogs = GetLog(context, CreatedBy);
context.AuditTrails.AddRange(auditLogs);
context.Entry(context.AuditTrails).State = System.Data.Entity.EntityState.Unchanged;
Run Code Online (Sandbox Code Playgroud)
它抛出以下异常。
The entity type DbSet`1 is not part of the model for the current context.
Run Code Online (Sandbox Code Playgroud)
我怎样才能实现上述逻辑?
我正在使用如下的Entity框架同时插入对象.
context = new MyContext();
foreach (var x in lstX)
{
var abc = new abc{ name= x.abcName };
context.abcs.Add(abc);
var xyz = new xyz{ name = x.xyzName };
context.xyzs.Add(xyz);
}
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
是否有可能获得所有这些插入对象的标识?
我正在尝试在 LINQ/Entity Framework 中构造一个查询,该查询将返回基于一列具有重复项的所有行。但是,我不想对它们进行分组,我实际上想获取所有具有重复项的行。
name age
---- ---
john 15
john 16
jack 20
jill 26
sam 10
sam 12
Run Code Online (Sandbox Code Playgroud)
如何根据名称列获取具有重复项的行列表?这是我期待的结果集:
name age
---- ---
john 15
john 16
sam 10
sam 12
Run Code Online (Sandbox Code Playgroud)
我尝试了这样的事情,但我认为这会给我一个分组结果,我认为:
var duplicates = Shop.GroupBy(r => r.Name)
.Where(x => x.Count() > 1)
.Select(val => val.Key);
Run Code Online (Sandbox Code Playgroud) 我在我的项目中使用实体框架代码第一种方法.我在包管理器控制台中使用enable-migrations语句创建了模型并启用了迁移.我的上下文类包含映射配置和关系
modelBuilder.Configurations.Add(new PostMap());
modelBuilder.Configurations.Add(new UserMap());
Run Code Online (Sandbox Code Playgroud)
我的迁移文件中的Up方法201302261054023_InitialCreate.cs包含所有表定义,作为通过DbSet <Type>属性指定的上下文.
我在自定义数据库初始化程序中更改了InitializeDatabase方法,因为我想在数据库初始化期间迁移到特定的迁移.
public void InitializeDatabase(T context)
{
bool databaseExists = context.Database.Exists();
if (!databaseExists)
context.Database.CreateIfNotExists();
var configuration = new Configuration();
var migrator = new DbMigrator(configuration);
migrator.Update("InitialCreate");
}
Run Code Online (Sandbox Code Playgroud)
可以修改201302261054023_InitialCreate类中的Up方法来添加另一个索引
CreateTable(
"dbo.City",
c => new
{
Id = c.Int(nullable: false, identity: true),
Name = c.String(maxLength: 450),
})
.PrimaryKey(t => t.Id);
Run Code Online (Sandbox Code Playgroud)
至
CreateTable(
"dbo.City",
c => new
{
Id = c.Int(nullable: false, identity: true),
Name = c.String(maxLength: 450),
})
.PrimaryKey(t => t.Id)
.Index(t=>t.Name,true);
Run Code Online (Sandbox Code Playgroud)
没有附加另一个迁移?
entity-framework ef-code-first ef-migrations entity-framework-5