我确定之前已经问过这个问题,但我找不到一个好的方法来搜索它.
我有一个类似以下的课程
public class Vendor
{
public int VendorId { get; set; }
public string Name { get; set; }
public int ProductCount { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有一个配置类设置
public class VendorConfiguration : EntityTypeConfiguration<Vendor>
{
public VendorConfiguration()
{
Property(p => p.Name).IsRequired().HasMaxLength(128);
Ignore(v => v.ProductCount);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我用来抓住供应商的查询.
public Vendor[] GetVendors()
{
using (var db = new UbidContext())
{
var query = (from vendor in db.Vendors
select vendor);
return query.ToArray();
}
}
Run Code Online (Sandbox Code Playgroud)
我怎么能用一个看起来类似的子查询填充ProductCount
ProductCount = (from vend in db.VendorProducts
where vend.VendorId …Run Code Online (Sandbox Code Playgroud) 我在现有数据库表上定义了一个ID列设置为[Key]的模型类.该表的字段定义为主键,int,not null.它不是和标识列.
在代码中创建新记录时,我在调用SaveChanges()方法之前在代码中设置ID列(到唯一值).
该方法返回错误:
无法将值NULL插入列'xxx_id',表'xxx.dbo.xxxxxx'; 列不允许空值.INSERT失败.该语句已终止.
似乎EF假定ID列是Identity列,因此不会将SQL调用中的ID传递给数据库.
有没有办法定义ID列来告诉EF它不是一个Identity列,并在SQL调用中传递该值
我正在尝试在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
运行这样的代码时出现以下错误:
var dbContext = new MyDbContext();
var list = dbContext.Set<TEntity>().ToList();
Run Code Online (Sandbox Code Playgroud)
从我最近做的更改到代码我理解,因为我向基类添加了一个事件,它会导致所有问题:
public PropertyChangedEventHandler PropertyChangedEvent { get; set; }
Run Code Online (Sandbox Code Playgroud)
将NotMapped属性应用于上述属性,我的代码现在再次运行.
现在我想知道是否有自动告诉EntityFramework不映射特定类型的属性(这不是我自己的类型,我不能将任何属性应用于.Net的类型).
例外:
Sequence does not contains any element.
at System.Linq.Enumerable.First[TSource](IEnumerable`1 source, Func`2 predicate)
at System.Data.Entity.ModelConfiguration.Edm.Services.StructuralTypeMappingGenerator.GetEntityTypeMappingInHierarchy(DbDatabaseMapping databaseMapping, EdmEntityType entityType)
at System.Data.Entity.ModelConfiguration.Edm.Services.AssociationTypeMappingGenerator.GenerateIndependentAssociationType(EdmAssociationType associationType, DbDatabaseMapping databaseMapping)
at System.Data.Entity.ModelConfiguration.Edm.Services.AssociationTypeMappingGenerator.Generate(EdmAssociationType associationType, DbDatabaseMapping databaseMapping)
at System.Data.Entity.ModelConfiguration.Edm.Services.DatabaseMappingGenerator.GenerateAssociationTypes(EdmModel model, DbDatabaseMapping databaseMapping)
at System.Data.Entity.ModelConfiguration.Edm.Services.DatabaseMappingGenerator.Generate(EdmModel model)
at System.Data.Entity.ModelConfiguration.Edm.EdmModelExtensions.GenerateDatabaseMapping(EdmModel model, DbProviderManifest providerManifest)
at System.Data.Entity.DbModelBuilder.Build(DbProviderManifest providerManifest, DbProviderInfo providerInfo)
at System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection)
at System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext)
at System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input)
at System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
at System.Data.Entity.Internal.InternalContext.Initialize()
at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type …Run Code Online (Sandbox Code Playgroud) 我有一个EF Code First Db上下文,我用它来查询数据库.我在Func<Product, bool>从我的Aggregate Repository 传入查询时发现了一些性能问题,并且进一步调查结果发现查询没有被转换为SQL查询.
经过一番挖掘,我发现了以下内容.
var results = _context.Products
.Where(p => p.ProductCode.Contains("AAA"))
.Where(p => p.CategoryId == 1)
.ToList();
Run Code Online (Sandbox Code Playgroud)
这完全符合预期.它使用Where子句生成一些参数化SQL.
================================================== ================
var results2 = _context.Products
.Where(p => p.ProductCode.Contains("AAA") && p.CategoryId == 1)
.ToList();
Run Code Online (Sandbox Code Playgroud)
这也按预期工作.它生成与上面相同的sql
================================================== ================
Func<Product, bool> pred = (p => p.ProductCode.Contains("AAA") && p.CategoryId == 1);
var results3 = _context.Products.Where(pred).ToList();
Run Code Online (Sandbox Code Playgroud)
这打破了.它不会在SQL中生成where子句,它会返回所有内容,然后在代码中对其进行过滤.
以拉迪斯拉夫的回答为基础
我正在尝试创建一个包装器类型EfObservableCollection<T>,ObservableCollection<T>它有一个额外的帮助器属性来简化持久性(当然这个解决方案有权衡,但它对我的域来说似乎是可行的).
但是,EfObservableCollection<T>EF似乎忽略了类型的属性.没有在数据库中创建适当的列.猜测实现IEnumerable<T>可能会触发EF忽略该类型,我注意到该实现没有改变行为.
我在这里错过了什么?
实体类
public class A
{
[DataMember]
public long Id { get; set; }
[DataMember]
public string Text { get; set; }
// Tags is not persisted
[DataMember]
public EfObservableCollection<string> Tags { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
包装类
[ComplexType]
public class EfObservableCollection<T> : IEnumerable<T>
{
const string VALUE_SEPARATOR = "\x8"; // Backspace character. Unlikely to be actually entered by a user. Assumes ASCII or UTF-8.
readonly string[] VALUE_SEPARATORS = …Run Code Online (Sandbox Code Playgroud) 假设您必须使用EF Code First和POCO类开发支持多种语言的网站,您将如何建模您的POCO类以支持此方案?
通过多语言支持,我的意思是不仅要在UI的某些资源文件中进行标签转换,而且还需要为数据库中的给定域实体存储名称,描述等.
例如:假设您的域模型具有实体产品.在您的数据库中,您需要存储2种语言的产品名称和描述(2个字段以简化)(但将来可以添加更多语言).根据当前的文化,UI需要从资源文件中获取标签的文本(这很容易实现),但您还需要显示来自数据库的产品名称和描述.
我试图简单地加载一个实体,修改一个属性,然后将其保存回数据库.
var db = new NewsletterContext();
var newsletter = db.Newsletters.Find(x => x.ID==newsletterID);
newsletter.SomeProperty = 5;
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
这会导致验证错误,因为新闻稿对象上有一些属性是必需的,当我这样做时显然没有加载Find().
我可以使用Include()for每个必需的属性来解决这个问题,然后是Where():
var db = new NewsletterContext();
var newsletter = db.Newsletters.Include(x => x.RequiredProp1)
.Include(x => x.RequiredProp2).Include(x => x.RequiredProp3)
.Where(x => x.ID==newsletterID)
.FirstOrDefault();
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
这不是一个非常优雅的解决方案,如果我向Newsletter对象添加更多必需属性,它将会中断.
有更好的解决方案吗?
我正在使用Code First Migrations Beta 1.
我想看看在我实际上在Package Manager控制台上调用'Update-Database'之前运行的迁移和SQL.
是否有命令在Package Manager控制台上获取此信息?
这是约.我正在使用的代码.
public class Note {
public virtual Customer Customer { get; set; }
public virtual User User { get; set; }
public ICollection<NoteComment> Comments { get; set; }
}
public class NoteComment {
public virtual User User { get; set; }
}
public class User {
public ICollection<Note> Notes { get; set; }
}
public class Customer {}
// --------------------------------------
public class OurDataContext {
private void ConfigureNotes(DbModelBuilder modelBuilder) {
modelBuilder.Entity<Note>()
.HasRequired<User>(n => n.User)
.WithMany(u => u.Notes)
.Map(a => a.MapKey("UserId"));
modelBuilder.Entity<Note>() …Run Code Online (Sandbox Code Playgroud) entity-framework circular-reference code-first sql-server-ce ef-code-first