小编Jam*_*mie的帖子

实体框架4.1 RC:Code First EntityTypeConfiguration继承问题

我正在尝试使用常见的EntityTypeConfiguration类来为我的所有实体配置主键,以便每个派生的配置类不会重复.我的所有实体都实现了一个公共接口IEntity(它表示每个实体必须具有int类型的Id属性).

我的配置基类如下所示:

public class EntityConfiguration<TEntity> : EntityTypeConfiguration<TEntity>

    where TEntity : class , IEntity {

    public EntityConfiguration() {

        HasKey( e => e.Id );

        Property( e => e.Id ).HasDatabaseGeneratedOption( DatabaseGeneratedOption.Identity );

    }

}
Run Code Online (Sandbox Code Playgroud)

然后每个实体都有自己的特定配置类,扩展这个类,如下所示:

public class CustomerConfiguration : EntityConfiguration<Customer> {

    public CustomerConfiguration() : base() {

        // Entity specific configuration here

    }

}
Run Code Online (Sandbox Code Playgroud)

它编译得很好,但我遇到的问题是,在运行时,当EF 4.1 RC尝试创建模型时,我会得到以下异常:

System.InvalidOperationException未处理Message =关键组件"Id"不是"Customer"类型的声明属性.验证它是否未从模型中明确排除,并且它是有效的原始属性.来源=的EntityFramework

如果我将CustomerConfiguration类更改为从EntityTypeConfiguration <Customer>扩展并重复主键配置,那么它工作正常,但我失去了共享通用配置的能力(DRY主体是动机).

  • 我在这里做错了吗?
  • 是否有另一种方法可以在实体之间共享通用配置?

这里参考的是其他涉及的类:

public interface IEntity {

    int Id { get; set; }

}

public class Customer : IEntity {

    public virtual int …
Run Code Online (Sandbox Code Playgroud)

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

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

使用Linq插入新数据 - WCF数据服务(以前称为ADO.NET数据服务)

我真的很难将一些数据插入到2个数据库表中.

我正在使用实体框架4使用Linq而不是WCF数据服务.

这两个表看起来像这样:

CREATE TABLE [dbo].[Accounts] (
    [Id] int IDENTITY(1,1) NOT NULL,
    [Email] nvarchar(max)  NOT NULL,
    [Password] nvarchar(max)  NOT NULL
);

CREATE TABLE [dbo].[Employees] (
    [Id] int IDENTITY(1,1) NOT NULL,
    [Name] nvarchar(max)  NOT NULL,
    [Role] nvarchar(max)  NOT NULL,
    [Account_Id] int  NOT NULL
);

ALTER TABLE [dbo].[Employees]
ADD CONSTRAINT [FK_EmployeeAccount]
    FOREIGN KEY ([Account_Id])
    REFERENCES [dbo].[Accounts]
    ([Id])
    ON DELETE NO ACTION ON UPDATE NO ACTION;
Run Code Online (Sandbox Code Playgroud)

每位员工必须只有一个帐户.但是,帐户可能根本没有任何员工.

我已经生成了实体,并公开了一个使用宽松访问规则设置的DataService:

config.SetEntitySetAccessRule( "Accounts" , EntitySetRights.All );
config.SetEntitySetAccessRule( "Employees" , EntitySetRights.All );
Run Code Online (Sandbox Code Playgroud)

使用LinqPad我可以成功插入一个帐户行,如下所示:

var context = this; …
Run Code Online (Sandbox Code Playgroud)

c# linq entity-framework-4 wcf-data-services

6
推荐指数
1
解决办法
4786
查看次数