标签: ef-code-first

ef cf linq populate ignored property

我确定之前已经问过这个问题,但我找不到一个好的方法来搜索它.

我有一个类似以下的课程

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)

linq entity-framework ef-code-first c#-4.0

2
推荐指数
1
解决办法
349
查看次数

在Code First和非身份标识密钥上插入失败

我在现有数据库表上定义了一个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 entity-framework-4 ef-code-first

2
推荐指数
1
解决办法
2096
查看次数

使用具有外部/导航键的Model类

我正在尝试在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

2
推荐指数
1
解决办法
823
查看次数

如何配置EF代码优先不映射特定类型?

运行这样的代码时出现以下错误:

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)

c# ef-code-first entity-framework-4.1

2
推荐指数
2
解决办法
6681
查看次数

为什么单独实例化的Func <T,bool>谓词不会转换为带有Entity Framework的SQL?

我有一个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子句,它会返回所有内容,然后在代码中对其进行过滤.

sql linq entity-framework generic-function ef-code-first

2
推荐指数
1
解决办法
249
查看次数

实体框架代码首先忽略的复杂类型

以拉迪斯拉夫的回答为基础

实体框架代码优先和原始类型的集合

我正在尝试创建一个包装器类型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)

entity-framework-4 ef-code-first

2
推荐指数
1
解决办法
1035
查看次数

EF Code First多语言支持

假设您必须使用EF Code First和POCO类开发支持多种语言的网站,您将如何建模您的POCO类以支持此方案?

通过多语言支持,我的意思是不仅要在UI的某些资源文件中进行标签转换,而且还需要为数据库中的给定域实体存储名称,描述等.

例如:假设您的域模型具有实体产品.在您的数据库中,您需要存储2种语言的产品名称和描述(2个字段以简化)(但将来可以添加更多语言).根据当前的文化,UI需要从资源文件中获取标签的文本(这很容易实现),但您还需要显示来自数据库的产品名称和描述.

multilingual ef-code-first

2
推荐指数
1
解决办法
2333
查看次数

修改Entity Framework中实体的属性会导致验证错误

我试图简单地加载一个实体,修改一个属性,然后将其保存回数据库.

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对象添加更多必需属性,它将会中断.

有更好的解决方案吗?

c# entity-framework entity-framework-4 ef-code-first

2
推荐指数
1
解决办法
726
查看次数

如何在调用"Update-Database"之前查看EF Code First Migrations更改

我正在使用Code First Migrations Beta 1.

我想看看在我实际上在Package Manager控制台上调用'Update-Database'之前运行的迁移和SQL.

是否有命令在Package Manager控制台上获取此信息?

entity-framework ef-code-first ef-migrations

2
推荐指数
1
解决办法
1171
查看次数

实体框架报告循环引用,但它没有任何意义

这是约.我正在使用的代码.

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

2
推荐指数
1
解决办法
2170
查看次数