繁体   English   中英

实体框架和业务对象

[英]Entity Framework And Business Objects

我以前从未使用过实体框架,我想尝试一些实现它的个人项目来让我的脚湿透。

我看到实体可以暴露给表示层。 但我不希望暴露某些字段,如修改日期和创建日期以及各种其他数据库字段。

我如何实现业务对象并只公开我需要的属性但仍保持对象可序列化?

这与 LinqToSql 相比有什么优势?

当您在 EDMX 模型中定义实体时,您可以指定每个属性的 setter 和 getter 的可见性,因此如果您不希望 ModifiedDate 在其他层中可见,您可以简单地将其指定为内部。

在此处输入图片说明

如果您的要求更复杂,例如 ModifiedDate 应该可以在实体程序集和业务逻辑程序集中访问,但不能在 UI 程序集中访问,那么您需要创建另一个对象,该对象将在业务逻辑和 UI 逻辑层之间交换。

个人在实体上使用包装类并公开或隐藏我需要的内容。

// instead of below property in your BLL:

private int m_someVariable;

public int SomeVariable
{
    get { return m_someVariable; }
    set { m_someVariable = value; }
}

// You can use the entity object:

private readonly EntityClass _entityObject = new EntityClass();

public int SomeVariable
{
    get { return _entityObject.SomeVariable; }
    set { _entityObject.SomeVariable = value; }
}

// or make it read-only at your BLL

public int SomeVariable
{
    get { return entityObject.SomeVariable; }
    // set { entityObject.SomeVariable = value; }
}

您只需将所需的属性绑定到表示层,这可以通过声明、业务逻辑层(具有自己的对象抽象级别)或您的 ViewModel 来完成。

      // this is your edmx
        Asset5Entities conx = new Asset5Entities();

// 认为这是一个新的 Contact 对象列表,它是数据库中的一个表 // 使用实体框架将此数据库表映射到一个对象以供您处理

            List$gt;Contact$lt; s = new List$gt;Contact$lt;();

// 使用大量 LINQ,您现在可以选择或查询您数据库中的任何表,并且您可以 // 在此处访问该表示例(电子邮件)中的列

        var result = from q in conx.Contacts select q.Email;

// 而不是

        string sqlcommand = "select email from Contacts";
        Contact con = new Contact();
        con.Email= "xxxx@gmail.com";
        con.FirstName="nader";

        //etc etc... 



        conx.Contacts.AddObject(con);

        //rather than   " insert into Contact values ......................"

        //having your queries within ur c# code rather than strings that are not parsed //for errors but on runtime was alot helpful for me

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM