有人可以提供一些建议或指出一些可以帮助做出这个决定的博客/文章吗?代理对我来说似乎很陌生,我对使用它们犹豫不决.我喜欢通过在我的模型中使用虚拟属性来控制延迟加载的能力,但这几乎是我能看到的所有好处.我的应用程序是一个简单的MVC Web应用程序,当实体遇到更改状态时,我不需要将任何挂钩连接到上下文中.
无论如何,这是我现在非常有限的利弊列表,让我知道如果我没有任何这个.
优点
缺点
orm entity-framework dynamic-proxy ef-code-first entity-framework-4.1
我正在使用WS类,当我运行应用程序时它给了我错误:
The type or namespace name 'Entity' does not exist in the namespace 'System.Data'
Run Code Online (Sandbox Code Playgroud)
我有一个参考System.Data;
,System.Data.Entity;
但没有变化.我一直在收到错误.我也在web.config中行:
<compilation debug ="true" targetFramework="4.0"/>
Run Code Online (Sandbox Code Playgroud) 我的项目中有以下模型
public class Category
{
public Guid ID { get; set; }
[Required(ErrorMessage = "Title cannot be empty")]
public string Title { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
而我正在尝试制作一个Title
独特的密钥,我搜索解决方案,但找不到任何.可以建议我怎么做,拜托?
我即将开始实现一个项目的数据访问基础设施,该项目采用DDD方法构建(这是我第一次尝试DDD,所以要温和;-)).
我将使用Entity Framework.到目前为止,我正在研究朱莉·勒曼(Julie Lerman)在她的伟大着作" 编程实体框架 "(Programming Entity Framework)中使用的方法,其中使用了ADO.NET POCO实体生成器,对T4模板和一些更多自定义代码进行了一些更改.
今天我开始使用Database First方法阅读有关EF4.1和ADO.NET DbContext Generator的文章,我正在尝试决定应该选择哪一个.
DbContext和EF4.1的DDD方法似乎比POCO实体更好,更清晰,但我担心它会在不久的将来导致一些问题,因为EF4.1仍然在RC中.
从ADO.NET团队博客,我知道EF4.1 不包括:
根据我的理解,由于我将使用Database First,因此未包含的功能数量较少.
总之,我的问题是:
我可以用EF4.1 DbContext Generator 替换POCO实体生成器吗?
有这个简单的代码,我得到"不能删除数据库"test_db"因为它当前正在使用"(CleanUp方法),因为我运行它.
[TestFixture]
public class ClientRepositoryTest
{
private const string CONNECTION_STRING = "Data Source=.;Initial Catalog=test_db;Trusted_Connection=True";
private DataContext _dataCntx;
[SetUp]
public void Init()
{
Database.SetInitializer(new DropCreateDatabaseAlways<DataContext>());
_dataCntx = new DataContext(CONNECTION_STRING);
_dataCntx.Database.Initialize(true);
}
[TearDown]
public void CleanUp()
{
_dataCntx.Dispose();
Database.Delete(CONNECTION_STRING);
}
}
Run Code Online (Sandbox Code Playgroud)
DataContext有一个这样的属性
public DbSet<Client> Clients { get; set; }
Run Code Online (Sandbox Code Playgroud)
如何强制我的代码删除数据库?谢谢
database unit-testing entity-framework database-connection entity-framework-4.1
我正在寻找一种通用的方法来检查一个实体DbSet
.像这样的东西,这是行不通的:
private DbContext DbContext { get; set; }
private DbSet<T> DbSet { get; set; }
public Boolean Exists(T entity) {
return ((from item in this.DbSet
where item == entity
select item).Count() > 0);
}
Run Code Online (Sandbox Code Playgroud)
该行where item == entity
适用于LINQ to SQL,但显然不适用于LINQ to Entities.由于实体可能具有不同的密钥,因此我们不能将它们全部继承自具有已知密钥的公共抽象以进行比较.
我可以做到这一点,但我担心将异常作为验证过程的表现这也不起作用,因为只要实体被分离,OriginalValues
就无法获得属性:
public Boolean Exists(T entity) {
try {
var current = this.DbContext.Entry(entity).OriginalValues;
// Won't reach this line if the entity isn't in the database yet
return true;
}
catch …
Run Code Online (Sandbox Code Playgroud) 通过主键选择多个实体的最有效方法是什么?
public IEnumerable<Models.Image> GetImagesById(IEnumerable<int> ids)
{
//return ids.Select(id => Images.Find(id)); //is this cool?
return Images.Where( im => ids.Contains(im.Id)); //is this better, worse or the same?
//is there a (better) third way?
}
Run Code Online (Sandbox Code Playgroud)
我意识到我可以做一些性能测试来比较,但我想知道是否实际上有比两者更好的方法,并且我正在寻找一些启示,这两个查询之间的区别是,如果有的话,一旦它们一直存在"翻译".
目前,当我需要运行将使用w/paging的查询时,我会这样做:
//Setup query (Typically much more complex)
var q = ctx.People.Where(p=>p.Name.StartsWith("A"));
//Get total result count prior to sorting
int total = q.Count();
//Apply sort to query
q = q.OrderBy(p => p.Name);
q.Select(p => new PersonResult
{
Name = p.Name
}.Skip(skipRows).Take(pageSize).ToArray();
Run Code Online (Sandbox Code Playgroud)
这有效,但我想知道是否有可能在使用linq时提高效率更高效?我想不出一种方法可以使用存储过程将数据检索的计数与数据检索结合到数据库中.
entity-framework entity-framework-4 c#-4.0 entity-framework-4.1
我想知道DbContext
该类是否是线程安全的,我假设它不是,因为我正在执行并行访问DbContext
我的应用程序中的并行线程,我得到了许多锁定异常和其他看起来可能与线程相关的东西.
直到最近我还没有收到任何错误...但直到最近我还没有访问DbContext
线程.
如果我是对的,人们会建议什么作为解决方案?
如果我在我的模型中声明实体关系为虚拟,则不需要Include
在我的LINQ查询中使用该语句,对吧? -
例如:这是我的模型类:
public class Brand
{
public int BrandID { get; set; }
public string BrandName { get; set; }
public string BrandDesc { get; set; }
public string BrandUrl { get; set; }
public virtual ICollection<Product> Products { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在,对于上面的模型类,我不需要使用var brandsAndProduct = pe.Brands.Include("Products").Single(brand => brand.BrandID == 22);
.
相反,我可以使用简单的var brandsAndProduct = pe.Brands.Where(brand => brand.BrandID == 22);
,我将在访问时自动使相关实体可用.
我的理解是正确的吗?
另外,请告诉我在什么情况下我应该更喜欢一个?
c# ×5
.net ×2
asp.net ×1
c#-4.0 ×1
database ×1
generics ×1
linq ×1
orm ×1
unique-key ×1
unit-testing ×1
web-services ×1