我想用一个参数执行存储过程,该参数使用EF4"Code First"返回表.我只是为了这个目的而使用一些DTO,它不需要返回实体.我试过:
a)使用函数import创建edmx文件并将其添加到我的ObjectContext,如下所示:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.RegisterEdmx("Model.edmx");
}
Run Code Online (Sandbox Code Playgroud)
但是我InvalidOperationException说"在使用Fluent API进行代码优先配置后,无法使用现有模型的注册".
b)访问underling连接并执行以下过程:
var connection = this.objectContext.UnderlyingContext.Connection;
connection.Open();
DbCommand command = connection.CreateCommand();
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "booklog.Recommendations";
command.Parameters.Add(
new EntityParameter("userId", DbType.Guid) { Value = this.userId });
var reader = command.ExecuteReader();
// etc.
Run Code Online (Sandbox Code Playgroud)
哪里
public class MyObjectContext : DbContext
{
public System.Data.Objects.ObjectContext UnderlyingContext
{
get { return this.ObjectContext; }
}
// ....
}
Run Code Online (Sandbox Code Playgroud)
但这种方法不起作用.它抛出InvalidOperationException消息"在当前工作空间中找不到为FunctionImport指定的容器'booklog'."
自从我读到Code-First以来,我发现这可能存在问题(尽管只是预览)我对EF4 CTP5的发布存在以下问题:
正如它所说的"新变化跟踪API"但它不能跟踪变化我猜.与LINQ to SQL相比,我举了一个例子来看看每个方法的反应:
LINQ to SQL:
Dim db2 As New LINQDataContext
Dim db3 As New LINQDataContext
db2.Product.FirstOrDefault(Function(m) m.ID = 100).Name = "Change1"
db3.Product.FirstOrDefault(Function(m) m.ID = 100).Name = "Change2"
db2.SubmitChanges()
db3.SubmitChanges()
Run Code Online (Sandbox Code Playgroud)
EF 4 CTP5:
Dim db2 As New ProductContext
Dim db3 As New ProductContext
db2.Product.FirstOrDefault(Function(m) m.ID = 100).Name = "Change1"
db3.Product.FirstOrDefault(Function(m) m.ID = 100).Name = "Change2"
db2.SaveChanges()
db3.SaveChanges()
Run Code Online (Sandbox Code Playgroud)
这些代码仅在其上下文中有所不同.在LINQ to SQL中,第二个SubmitChanges会出现"未找到或未更改行"的异常.,但在EF中它会忽略这些变化并继续两次更改行,我认为这很糟糕,因为我们必须考虑并发,对吧?
linq entity-framework code-first linq-to-sql entity-framework-4
我有这样一个实体:
public class Course {
public CultureInfo Culture {get; set;}
:
}
Run Code Online (Sandbox Code Playgroud)
我想只将Name属性映射CultureInfo到Entity Framework为我生成的表中的单个列.
我该怎么做?目前我已经尝试过查看DbContext的OnModelCreating()方法,但我找不到任何突出的东西.
我正在使用Entity Framework 4.1和MVC 3应用程序使用Code First方法.
非常感谢.
mapping code-first ef-code-first entity-framework-4.1 asp.net-mvc-3
我正在尝试使用MVC 3和EF 4.1首先使用代码并遵循Scott Guthries教程 http://weblogs.asp.net/scottgu/archive/2011/05/05/ef-code-first-and-data- scaffolding-with-the-asp-net-mvc-3-tools-update.aspx.
我遇到的问题是,当我创建产品控制器和相关的脚手架视图时,在任何视图中都没有创建"类别"列("编辑","创建","索引"等),应该创建根据教程.
我已经跟踪了没有显示列的原因是因为t4模板...它没有检查它是否是可绑定类型以便将属性显示为列.
检查它是否可绑定的逻辑是:
bool IsBindableType(Type type) {
return type.IsPrimitive || bindableNonPrimitiveTypes.Contains(type);
}
Run Code Online (Sandbox Code Playgroud)
其中bindableNonPrimitiveTypes是固定列表:
static Type[] bindableNonPrimitiveTypes = new[] {
typeof(string),
typeof(decimal),
typeof(Guid),
typeof(DateTime),
typeof(DateTimeOffset),
typeof(TimeSpan),
};
Run Code Online (Sandbox Code Playgroud)
我刚刚安装了VS2010 sp1,EF 4.1和本教程引用的MVC3工具更新.我确定我已经按照所有步骤......
我哪里错了/我错过了什么?
我正在尝试在ASP.NET MVC 3中开发目录项目,并首先将EF代码与现有数据库一起使用.我的数据库中有一个指向自身的Categories表.为此,我编写了以下模型类. - "如果模型错误,请纠正我" -
public class Category
{
public int CategoryID { get; set; }
public string CategoryName { get; set; }
public int? ParentCategoryID { get; set; }
public string CategoryDesc { get; set; }
[ForeignKey("ParentCategoryID")]
public virtual Category ParentCategory { get; set; }
public virtual ICollection<Product> Products { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
问题:我无法理解如何使用本课程.使用并将以下代码传递给视图
var cat = dbStore.Categories.Include("ParentCategory").ToList().
我收到此错误:对象引用未设置为对象的实例.发生这种情况是因为根类别具有null ParentCategoryID.请告诉我您将如何使用此代码或任何可以帮助我理解在这种情况下工作的资源.任何类型的代码都会有用,它使用上面的模型,比如显示列表或菜单或任何东西,只需要任何东西.
entity-relationship hierarchical-data code-first ef-code-first entity-framework-4.1
我正在尝试实现一个相对简单的概念,但看起来EF代码首先没有一个简单的方法来做到这一点.基本上我有一个地址类,它也有一个County属性.我正在映射到现有表.在某些情况下,该表有一个用于县的字段,而在其他情况下则没有.所以我只是试图忽略不适用的郡.
Fluent API允许映射到Complex Type的属性:
.Property(Function(c) c.HomeAddress.County).HasColumnName("COUNTY")
Run Code Online (Sandbox Code Playgroud)
那很棒.但显然它不允许你忽略它:
.Ignore(Function(c) c.HomeAddress.County)
Run Code Online (Sandbox Code Playgroud)
抛出错误:
表达式'p => p.Address.County'不是有效的属性表达式.表达式应该表示一个属性:C#:'t => t.MyProperty'VB.Net:'Punction(t)t.MyProperty'.
这应该在Fluent API中允许,并且应该像上面的语句一样简单.
所以按照惯例,Code首先认为它是一个属性,你得到错误:
"无效的列名'Address_County'.
这太烂了!所以我基本上坚持这个属性.我怎么忽略它?有任何想法吗?
我不想删除该属性,我无法将其添加到表中.我尝试添加注释,代码可以工作,但是在我需要它的情况下我无法映射它.
我希望有一个简单的解决方案,或者至少是一个适当的解决方案.
我博客的模型:
namespace AlexPeta_2.Models
{
public class Article
{
public int ArticleId { get; set; }
public string Title { get; set; }
public string Text { get; set; }
public char Published { get; set; }
public DateTime CreatedDate { get; set; }
public char AllowComment { get; set; }
public virtual ICollection<Tag> Tags { get; set; }
public virtual ICollection<Comment> Comments { get; set; }
}
}
namespace AlexPeta_2.Models
{
public class Comment
{
public int CommentId { get; …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用EF5 CodeFirst而无法使用简单的设置;(
我有两个类Foo和Bar,其中Bar表示查找表.
public class Foo
{
public int Id { get; set; }
public string Name { get; set; }
public virtual Bar Bar { get; set; }
}
public class Bar
{
public int Id { get; set; }
public string Description { get; set; }
}
public class MyDbContext : DbContext
{
static MyDbContext()
{
Database.SetInitializer<MyDbContext>(null);
}
public MyDbContext(): base("testEF"){}
public DbSet<Foo> Foos { get; set; }
public DbSet<Bar> Bars { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在我创建了一个静态类,用作DataAccess Layer …
我正在用NUnit和Entity Framework编写一些UnitTests.如何从Entity Framework级别删除整个localdb数据库?
注意:我不想清除表的数据.我想删除整个数据库.
此外,我可以在我的应用程序工作目录中创建一个localdb文件,前提是尚未创建数据库:
string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "");
var testDbFileName = String.Format(@"UnitTestDB.mdf");
var testDbFileNameWithPath = path + @"\" + testDbFileName;
var connectionString =
String.Format(
@"Data Source=(localdb)\V11.0;Initial Catalog={0};Integrated Security=True;AttachDBFilename={1};MultipleActiveResultSets=True",
"UnitTestDB", testDbFileNameWithPath);
//Here would be the code passing connection string to DbContext and so on..
Run Code Online (Sandbox Code Playgroud)
仅删除文件"UnitTestDB.mdf"是不够的.在SQL Management Studio中仍然有对db的引用
我首先使用实体框架代码.我有2个实体(用户和配置文件),它们之间的关系是一对多,即一个用户只能有一个配置文件,但一个配置文件可以分配给许多用户.实体下方:
[Table("Users")]
public class User
{
[Key(), Required]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
public virtual string Name { get; set; }
[Required]
[ForeignKey("Profile")]
public virtual int ProfileId { get; set; }
public virtual Profile Profile { get; set; }
public virtual ICollection<AnotherEntityB> anotherEntityB { get; set; }
}
[Table("Profiles")]
public class Profile
{
[Key(), Required]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
public virtual string Name { get; set; }
// Below the user …Run Code Online (Sandbox Code Playgroud) code-first ×10
.net ×1
asp.net-mvc ×1
entity ×1
frameworks ×1
linq ×1
linq-to-sql ×1
localdb ×1
mapping ×1