Domain Model & Code First
Posted lovetomato
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Domain Model & Code First相关的知识,希望对你有一定的参考价值。
领域模型(Domain Medel)是从现实世界业务逻辑抽象为业务实体,所以这种模式用Code First更适合。利用上章案例接受下Entity Framework
的Code first
的强大功能。
安装EF
通过Package Manager Console安装EF:install-package entityframework
默认会安装最新版本
Model创建类
注意关键字virtual
,为实体关联到的属性
public class BankAccount
{
public Guid BankAccountId { get; set; }
public decimal Balance { get; set; }
public string CustomerRef { get; set; }
public virtual ICollection<Transaction> Transactions { get; set; }
}
public class Transaction
{
public int ID { get; set; }
/// <summary>
/// 保存到表中为BankAccount的外键
/// </summary>
public Guid BankAccountId { get; set; }
public decimal Deposit { get; set; }
public decimal Withdraw { get; set; }
public string Reference { get; set; }
public DateTime Date { get; set; }
public virtual BankAccount BankAccount { get; set; }
}
连接数据库指定及Context创建
webconfig文件中添加
<connectionStrings>
<add name="BankAccountContext" connectionString="Data Source=(LocalDb)mssqllocaldb;AttachDbFilename=|DataDirectory|BankAccount.mdf;Initial Catalog=BankAccount;Integrated Security=SSPI;" providerName="System.Data.SqlClient" />
</connectionStrings>
添加数据上下文
public class BankAccountContext: DbContext
{
public DbSet<BankAccount> BankAccounts { get; set; }
}
利用Package Manager console
完成数据库初始化
enable-migrations
会添加类Configuration
,添加测试数据在Seed
方法中添加
var bankAccounts = new List<BankAccount>
{
new BankAccount { BankAccountId=new Guid("27B5318E-EEA5-404C-ABE4-185C3411917E"), Balance=73.00m,CustomerRef="Bob Account" },
new BankAccount { BankAccountId=new Guid("C2F81C0C-2EFD-40EF-BBC6-B394CF80EDF0"), Balance=456.00m,CustomerRef="Scott Test" },
new BankAccount { BankAccountId=new Guid("903BB2F8-019A-47D6-88E4-DFD2AC9BB323"), Balance=0.00m,CustomerRef="Marys Account" }
};
- 添加本次对数据库的修改
add-migration InitialCreate
,以后每次每次为Model中类添加属性(对应表添加字段)都需要执行add-migration 生成的文件名
再同步到数据库
同步到数据库
update-database
,可用看到App_Data
文件夹下添加了一个BankAccount.mdf
文件
以上是关于Domain Model & Code First的主要内容,如果未能解决你的问题,请参考以下文章
什么是领域模型(domain model)?贫血模型(anaemic domain model) 和充血模型(rich domain model)有什么区别
题目 B: 分块-----佐助题库(http://12345code.com/problem.php?cid=1038&pid=1)
莫比乌斯二连 HDU 5212 Code & HDU 1695 GCD
Domain=NSCocoaErrorDomain Code=3840 "操作无法完成
Swift 2.0 和 Parse - 'init()' 不可用:使用 'init(domain:code:userInfo:)'